Javascript中字符串和字符数组之间有什么区别?

Reg*_*arg 6 javascript variables

当我检查这两个是否相等时,他们显然不是.有人可以解释原因吗?

var string = "Hello";
var array = ['H', 'e', 'l', 'l', 'o'];
Run Code Online (Sandbox Code Playgroud)

为什么(string === array)是假的?

编辑:这个网站太棒了.这么快的帮助.多谢你们.

Fel*_*ing 11

为什么(string === array)是假的?

您正在使用严格比较(===),它还检查值的数据类型.显然,一个原语字符串值不相同的数据类型作为对象,和对象是唯一真正等于自己.证明:

var foo = [1,2,3];
var bar = [1,2,3];

console.log(foo === bar); // false
console.log(foo === foo); // true
Run Code Online (Sandbox Code Playgroud)

现在,如果您使用松散比较(==),则会返回以下比较true:

console.log([1,2,3] == '1,2,3'); // true
Run Code Online (Sandbox Code Playgroud)

为什么?因为数组首先转换为字符串,这恰好会导致相同的字符串值.但这并不意味着值是相同的(一个仍然是一个数组,另一个仍然是一个字符串).这就是为什么你应该总是使用严格的比较.


Javascript中字符串和字符数组之间有什么区别?

字符串不是数组,因为它们继承自不同的 原型(*),因此具有不同的实例方法.例如,数组有一个方法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
Run Code Online (Sandbox Code Playgroud)

*:实际上,原始字符串和String对象之间甚至存在差异,但我不想在这里过深.技术上原始的字符串没有任何方法,因为它们不是对象,但在大多数情况下,您可以将原始字符串视为对象.