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

时间:2014-02-16 07:55:59

标签: javascript variables

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

var string = "Hello";
var array = ['H', 'e', 'l', 'l', 'o'];

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

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

5 个答案:

答案 0 :(得分:10)

  

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

您正在使用strict comparison (===),它还会检查值的数据类型。显然,原始字符串值与对象的数据类型不同,对象只是真正等于它们自己。证明:

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

console.log(foo === bar); // false
console.log(foo === foo); // true

现在,如果您使用loose comparison (==),以下比较会返回true

console.log([1,2,3] == '1,2,3'); // true

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


  

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

字符串不是数组,因为它们继承自different prototypes(*),因此具有不同的实例方法。例如,数组有method join,字符串有method match

从一个角度来看,数组和字符串类似,因为它们都是类似数组的对象。

array-like 是什么意思?这意味着该对象具有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对象之间甚至存在差异,但我不想在这里过深。技术上原始的字符串没有任何方法,因为它们不是对象,但在大多数情况下,您可以将原始字符串视为对象。

答案 1 :(得分:2)

你对c / c ++感到困惑。在java-script数组中是另一个对象,而字符串变量是另一个。请尝试阅读this

答案 2 :(得分:2)

在JavaScript中===严格相等,它将两个值进行比较以获得相等性。在比较之前,这两个值都不会隐式转换为其他值。这就是为什么你必须使用不同的对象(String和Array),这就是你的比较返回false的原因。

您可以在Strict equality using ===

找到更多信息

答案 3 :(得分:1)

在Javascript中,String和Array数据类型不相等。

答案 4 :(得分:0)

尽管大多数答案都是正确的,但我想在此之上添加一些内容。 我不想重复,为什么比较是错误的,因为其他人已经解释过了。

这是内容相同的字符串和数组的另一个区别。

const str = 'Hello';
const arr = ['H','e','l','l','o'];

当我们使用引用数据类型声明 vairbale 常量时,我​​们可以操作内容。

arr = anotherArray;

会给我们错误但我们仍然可以做到

arr[0] = 'S';

数组现在看起来像 ['S','e','l','l','o'];

在字符串的情况下,尽管您可以通过数组表示法访问元素,但如果您尝试 更改其内容它将静默失败,即不会抛出任何错误但也不会更改内容。