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

问题描述 投票:0回答:6

当我检查这两者是否相等时,它们显然不相等。有人能解释一下为什么吗?

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

为什么

(string === array)
是假的?

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

javascript variables
6个回答
17
投票

为什么

(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 对象之间甚至存在差异,但我不想在这里讨论得太深。从技术上讲,原始字符串没有任何方法,因为它们不是对象,但在大多数情况下,您可以将原始字符串视为对象。


2
投票

你对c/c++感到困惑。在java脚本中,数组是另一个对象,字符串变量是另一个对象。尝试阅读这个


2
投票

在 JavaScript 中,

===
严格相等,它比较两个值是否相等。在比较之前,这两个值都不会隐式转换为其他值。所以这就是为什么你必须使用不同的对象(字符串和数组),它们不能相等,这就是为什么你的比较返回
false

更多信息,您可以在使用===

严格相等找到

2
投票

虽然大多数答案都是正确的,但我想在此基础上添加一些内容。 我不想重复,为什么比较是错误的,正如其他人已经解释的那样。

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

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

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

arr = anotherArray;

会给我们带来错误,但我们仍然可以做

arr[0] = 'S';

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

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


1
投票

在 Javascript 中,字符串和数组数据类型不相等。


0
投票

字符串和数组的行为方式基本相同,但在 Javascript 中技术上是不同的数据类型,因此严格比较 === 会说它是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.