为什么要添加" {" "}"从数组中删除括号? (JavaScript的)

时间:2017-03-13 06:57:37

标签: javascript arrays string object

示例:

var test = [];
test.push( 'string', 'test'); //[ 'string', 'test' ]
console.log('{' + test + '}'); // {string,test}
console.log(typeof('{' + test + '}')); //string

为什么添加{}会从测试中移除括号?我原以为第三行的结果是{ [string, test] }

4 个答案:

答案 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种不同的数据类型时,我们得到“等效”类型。

实施例

我们知道truefalse是布尔值,而不是数字。 但我们仍然可以将它们用作数字,因为由于类型强制,true == 1false == 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()。 弱比较(==)也是如此。所以我们可以使用技巧比较(===)来避免这种情况