当我检查这两者是否相等时,它们显然不相等。有人能解释一下为什么吗?
var string = "Hello";
var array = ['H', 'e', 'l', 'l', 'o'];
为什么
(string === array)
是假的?
编辑:这个网站太棒了。这么快的帮助。谢谢大家。
为什么
是假的?(string === array)
您正在使用严格比较 (
===
),它还会检查值的数据类型。显然,原始字符串值与对象不是相同的数据类型,并且对象仅真正等于其自身。证明:
var foo = [1,2,3];
var bar = [1,2,3];
console.log(foo === bar); // false
console.log(foo === foo); // true
现在,如果您要使用 loose 比较 (
==
),以下比较确实会返回 true
:
console.log([1,2,3] == '1,2,3'); // true
为什么?因为数组首先被转换为字符串,而这恰好会产生相同的字符串值。但这并不意味着值是相同的(一个仍然是数组,另一个是字符串)。这就是为什么你应该始终使用严格比较。
Javascript 中的字符串和字符数组有什么区别?
字符串不是数组,因为它们继承自 different 原型 (*),因此具有不同的实例方法。例如,数组有一个 方法
join
,字符串有一个 方法 match
。
从一个角度来看,数组和字符串是相似,因为它们都是类似数组的对象。
类数组是什么意思?这意味着该对象具有
length
属性和数字属性。字符串具有 length
属性,可提供字符串中的字符数,并且您可以使用 str[i]
访问字符串中的单个字符。示例:
var arr = ['a','b','c'];
var str = "abc";
console.log(arr.length); // 3
console.log(str.length); // 3
console.log(arr[0]); // a
console.log(str[0]); // a
console.log(arr === str); // false
console.log(typeof str); // string
console.log(typeof arr); // object
*:实际上,原始字符串和 String 对象之间甚至存在差异,但我不想在这里讨论得太深。从技术上讲,原始字符串没有任何方法,因为它们不是对象,但在大多数情况下,您可以将原始字符串视为对象。
你对c/c++感到困惑。在java脚本中,数组是另一个对象,字符串变量是另一个对象。尝试阅读这个
在 JavaScript 中,
===
是 严格相等,它比较两个值是否相等。在比较之前,这两个值都不会隐式转换为其他值。所以这就是为什么你必须使用不同的对象(字符串和数组),它们不能相等,这就是为什么你的比较返回false
。
更多信息,您可以在使用===
严格相等找到虽然大多数答案都是正确的,但我想在此基础上添加一些内容。 我不想重复,为什么比较是错误的,正如其他人已经解释的那样。
这是具有相同内容的字符串和数组的另一个区别。
const str = 'Hello';
const arr = ['H','e','l','l','o'];
当我们使用引用数据类型声明 vairbale 常量时,我们可以操作内容。
arr = anotherArray;
会给我们带来错误,但我们仍然可以做
arr[0] = 'S';
数组现在看起来像 ['S','e','l','l','o'];
在字符串的情况下,尽管您可以通过数组表示法访问元素,但如果您尝试 更改其内容,它将默默失败,即不会抛出任何错误,但也不会更改内容。
在 Javascript 中,字符串和数组数据类型不相等。
字符串和数组的行为方式基本相同,但在 Javascript 中技术上是不同的数据类型,因此严格比较 === 会说它是错误的。