为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]

Posted

技术标签:

【中文标题】为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]【英文标题】:Why an empty array equals to an empty string while not to another empty array in javascript? [duplicate]为什么一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制] 【发布时间】:2018-07-20 23:23:23 【问题描述】:

谁能描述一下上面的图片?这是我的 Chrome 开发工具控制台的屏幕截图。

【问题讨论】:

提示:[].toString() 返回什么? 那为什么[] == []返回false? 因为this。另请阅读this。 数组是对象,比较两个对象总是返回 false,因为它们是 2 个不同的“事物”。当doing [] == "" 时,数组转换为字符串由 js 解释器完成。然后比较两个字符串。 第三个也解释了它在接受的答案的底部。有许多问答可以回答这些等式之一。 【参考方案1】:

因为 javascript 强制。

[] 大致等同于"",因此使用等于""[].toString() 强制转换为string

为什么[] == [] and [] === []返回false:

如果您要比较两个非原始值,例如对象(包括函数和数组),则 == 和 === 比较规则。因为这些值实际上是通过引用保存的,所以 == 和 === 比较都只会检查引用是否匹配,而不是任何关于基础值的内容。

var a = [1,2,3];
var b = [1,2,3];

var c = "1,2,3";

a == c;     // true
b == c;     // true
a == b;     // false

默认情况下,数组被强制转换为字符串,只需用逗号 (,) 将所有值连接起来。

【讨论】:

您所说的“== 和 === 比较规则”是什么意思? @nCardot 当您进行严格比较时,也会比较数据类型,但如果不是严格比较,则值会强制转换为相似的数据类型。这件事有一定的规则来强制价值观。你可以在 mdn 上阅读更多内容。

以上是关于为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中做字符串非空判断,为啥要同时判断字符串不为null和不等于空串?

为啥空字符串上的 .ToString() 会导致空错误,而 .ToString() 在具有空值的可空 int 上工作正常?

java中做字符串非空判断,为啥要同时判断字符串不为null和不等于空串?

NStextfield 显示空占位符(即空字符串),而不是使用核心数据显示“无选择”。苹果漏洞?

java判断字符串,为啥用"=="做不了判断

c++如何确认数组的元素为空