当绊倒JSFuck(一种仅使用6个字符[]()+!的完美语言,并且是完全有效的javascript代码)时,我发现在Javascript中将2个数组加在一起[] + []
会返回一个空字符串{{1 }}。
通常,添加数组会将表达式转换为字符串
例如:''
给出false + []
。
为什么会这样或从哪里来?我在哪里可以找到比this documentation of javascript operators 更完整的关于这些特殊行为的文档。非常感谢您提前提供的帮助,我很好奇我对javascript的理解。
答案 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