示例:
var test = [];
test.push( 'string', 'test'); //[ 'string', 'test' ]
console.log('{' + test + '}'); // {string,test}
console.log(typeof('{' + test + '}')); //string
为什么添加{
和}
会从测试中移除括号?我原以为第三行的结果是{ [string, test] }
答案 0 :(得分:1)
原因是Javascript创建时做出的众多错误选择之一,现在因为向后兼容性而无法修复。
转换为字符串时的数组成为转换为字符串的元素的串联,以逗号分隔,不包括[
]
标记。
这就是
的原因(1 == [1])
是Javascript中的true
(两者有不同的类型,它们对字符串的转换是相同的),以及定义的原因
var a = [1], b = 1, c = [[1]];
表达式
(a == b && b == c && a != c)
也是true
。
答案 1 :(得分:0)
这是因为,当你这样做时:'' + test
;你会得到字符串:string,test
对于Array
对象,如果它与任何字符串组合,它将转换为格式为element1,element2,element3
答案 2 :(得分:0)
JS表演 type coercion 要么 type conversion ,这意味着当在表达式中一起使用2种不同的数据类型时,我们得到“等效”类型。
我们知道true
和false
是布尔值,而不是数字。
但我们仍然可以将它们用作数字,因为由于类型强制,true == 1
和false == 0
。
不是我使用==
而不是===
。
同样,我们可以这样做:
var a = 123;
var b = a + 1; // 124
var c = a + true; // 124
var d = a + '1'; // 1231
在你的情况下,你正在强迫一个aray和一个字符串。并且JS引擎将数组强制转换为字符串类型:
var a = [1,2,3]
console.log(a) // [1, 2, 3]
console.log(a + '') // "1,2,3"
console.log('{' + a + '}') // "{1,2,3}"
答案 3 :(得分:0)
Javascript非常灵活,不幸的是在这种情况下,它非常灵活,我们理解。那么在下面的代码中会发生什么?
console.log('{' + test + '}');
test是一个Array
对象,但是当您尝试将其与另一个字符串组合时,JavaScript会看到所有内容都是字符串,在这种情况下,test
将转换为string,test
。
转换方式如Array.prototype.toString()。
弱比较(==
)也是如此。所以我们可以使用技巧比较(===
)来避免这种情况