-1

在偶然发现 JSFuck(一种仅使用 6 个字符 []()+! 并且是完全有效的 javascript 代码的深奥语言)时,我看到在 Javascript 中将 2 个数组加在一起会[] + []返回一个空字符串''。通常添加数组也会将表达式转换为字符串

例如:false + []'false'.

为什么这个或这个来自哪里,我在哪里可以找到比javascript 运算符的文档更完整的这些特殊行为的文档。非常感谢您提前提供的帮助,我很想扩展我对 JavaScript 的理解。

4

1 回答 1

-2

您需要知道,在运算符“+”之前,如果操作数不是数字,javascript 在许多情况下会使用方法“toString”。因此,“+”运算符可以实现连接或加法。

在至少一个非数字操作数的情况下,操作数更经常导致字符串并将它们连接起来。

在这里您可以找到更多信息类型转换

console.log(1 + '1' === '11'); // true
console.log(1 + 1 === 2); // true

但请记住,toString()并不总是有效。对于某些类型,强制转换为数字类型并可能返回意外结果。

console.log(1 + NaN); // NaN
console.log(1 + Infinity); // Infinify 
console.log(1 + undefined); // NaN

console.log([1, 2].toString()); // 1,2
console.log([1, 2] + '') // 1,2

console.log(false.toString()); // 'false'
console.log(false + ''); // 'false'

console.log([].toString() === ''); // true
console.log(('' + []) === ''); // true

Array.prototype.toString = () => 'test';
console.log([].toString() === 'test'); // true
console.log(('' + []) === 'test'); // true 

于 2019-05-06T21:17:35.467 回答