+运算符的奇怪行为从何而来?

时间:2019-05-06 21:09:44

标签: javascript arrays string casting

当绊倒JSFuck(一种仅使用6个字符[]()+!的完美语言,并且是完全有效的javascript代码)时,我发现在Javascript中将2个数组加在一起[] + []会返回一个空字符串{{1 }}。 通常,添加数组会将表达式转换为字符串

例如:''给出false + []

为什么会这样或从哪里来?我在哪里可以找到比this documentation of javascript operators 更完整的关于这些特殊行为的文档。非常感谢您提前提供的帮助,我很好奇我对javascript的理解。

1 个答案:

答案 0 :(得分:-2)

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

对于至少一个非数字操作数,操作数通常会导致字符串并将其连接起来。

Here you can find more info type conversion

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