为啥一个空数组等于一个空字符串,而不是 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和不等于空串?