为甚么要加上;{quot;};是否从数组中删除括号?(JavaScript)

为甚么要加上;{quot;};是否从数组中删除括号?(JavaScript),javascript,arrays,string,object,Javascript,Arrays,String,Object,例如: var test = []; test.push( 'string', 'test'); //[ 'string', 'test' ] console.log('{' + test + '}'); // {string,test} console.log(typeof('{' + test + '}')); //string 为什么添加{和}会从测试中删除括号?我本来希望第三行的结果是{[string,test]}原因是在创建Javascript时做出了许多错误的选择,现在由于向后兼容

例如:

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

为什么添加
{
}
会从测试中删除括号?我本来希望第三行的结果是
{[string,test]}

原因是在创建Javascript时做出了许多错误的选择,现在由于向后兼容而修复已经太晚了

转换为字符串的数组成为转换为字符串的元素的串联,由逗号分隔,无需包装
[
]
标记

例如,这就是

(1 == [1])
在Javascript中是否为
true
(两者具有不同的类型,并且它们到字符串的转换是相同的),以及定义

var a = [1], b = 1, c = [[1]];
表情

(a == b && b == c && a != c)

也是
正确的

这是因为,当您这样做时:
''+test
;您将获得字符串:
string,test

对于
数组
对象,如果它与任何字符串组合,它将被转换为以下格式的字符串:
element1、element2、element3
或 ,这意味着当一个表达式中同时使用两种不同的数据类型时,我们将得到一种“等效”类型

例子 我们知道
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}"

Javascript非常灵活,不幸的是,在这种情况下,我们可以理解它非常灵活。那么在下面的代码中会发生什么呢

console.log('{' + test + '}');
test是一个
数组
对象,但当您尝试将它与另一个字符串组合时,JavaScript将看到所有内容都是字符串,在这种情况下,
test
将转换为
string,test
。 转换方式类似于。
弱比较也是一样(
==
)。因此,我们可以使用技巧比较(
=
)来避免这样的情况

只尝试
console.log(''+test)
-数组的字符串表示形式没有括号。
+
标点符号重载。它可能意味着,也可能意味着。哪个是基于上下文的。
'+test
test
强制为字符串:
test.toString()
给出相同的结果。JS是一种类型非常松散的语言。在涉及不同类型的操作中,将自动执行从对象到基本体(如字符串或布尔)的类型强制。在这种特殊情况下,
Array.prototype.toString()
函数忽略了外括号,而与
String.prototype.split(“,”)
相反。为什么在创建JavaScript时,数组的字符串表示形式是由逗号分隔的元素值是一个错误的选择?在将数组转换为字符串时,是否有更好的默认选项可以实现?@nnnnnn:
[1,2,3]
被翻译成
“[1,2,3]”
会更好(Python就是这么做的)。当然,
==
的大多数疯狂之处都来自隐式转换(如果将
==
作为“默认”比较,Javascript会更好),但是数组->字符串规则增加了一些额外的怪异之处。