JavaScript中Number方法的奇怪语法

And*_*ech 6 javascript syntax extend

看看下面的代码:

Number.prototype.isIn = function () {
    for (var i = 0, j = arguments.length; i < j; ++i) {
        if (parseInt(this, 10) === arguments[i]) {
            return true;
        }
    }
    return false;
};

var x = 2;
console.log(x.isIn(1,2,3,4,5)); // <= 'true'
console.log(2.isIn(1,2,3,4,5)); // <= Error: 'missing ) after argument list'
Run Code Online (Sandbox Code Playgroud)

为什么当它是一个变量时,代码才能正常工作,但是当它是一个数字文字时,它会失败?


而且,奇怪的是,为什么以下行有效?

console.log((2).isIn(1,2,3,4,5)); // <= 'true'
Run Code Online (Sandbox Code Playgroud)

在上面这一行中,我基本上将括号中的文字括起来.

Jos*_*ola 10

这是一个语法错误,因为您代表一个数字.字符串可以以这种方式工作,但不是数字,因为紧跟在数字后面的句点表示小数值..导致错误后的字符.


And*_*ris 7

大多数答案已经说明数字文字后面的一个点被认为是这个数字的一​​部分作为分数分隔符.但是如果您仍然希望使用点作为运算符,则快速简便的修复将在数字和空间之间留下空白空间.

2 .isIn(1,2,3,4,5) // <- notice the space between 2 and .
Run Code Online (Sandbox Code Playgroud)