如何强制parseInt在任何字符串上返回NaN?

时间:2016-07-09 12:19:44

标签: javascript type-conversion

例如,如果我们说:

parseInt("128"); // => 128

完美无瑕地工作。

如果我们说:

parseInt("a128"); // => NaN

但如果我们说:

parseInt("123a"); // => 128 again :(

是否有明确的方法来解析数字,如果参数中出现任何字母字符,它将返回NaN

4 个答案:

答案 0 :(得分:2)

parseInt不会以这种方式工作,请查看specs

  1. 删除前导空格和尾随空格。
  2. 如果遇到的字符未被解释为整数且基数不支持,则会被忽略
  3. 但是你可以通过

    强制它以这种方式工作

    
    
        (function(){
                var old = parseInt;
                parseInt = function(x, y){
                    if ( ( !y || y == 10 ) && isNaN( Number(x) ) ) { return NaN }
                    return old.apply(this, arguments)
                }
        })();
    
    //test cases
    console.log( parseInt("123") );
    console.log( parseInt("123a") );
    console.log( parseInt("123a", 16) );
    console.log( parseInt("a123") );
    
    
    

答案 1 :(得分:2)

对于需要处理字符串的场景,您也可以使用 Number 函数。 Number()函数将object参数转换为表示对象的数字值

   
//test cases
console.log( Number("123") );
console.log( Number("123a") );
console.log( Number("a123") );

答案 2 :(得分:1)

您也可以自己执行此功能:

using System.Data.Entity;

答案 3 :(得分:0)

这是你期望的吗?

function checkIsStringNaN (str) {
  return isNaN(str) ? NaN : parseInt(str)
}

checkIsStringNaN("128") // 128
checkIsStringNaN("a128") // NaN
checkIsStringNaN("123a") // NaN