【问题标题】:What's the difference between a string and an array of characters in Javascript?Javascript中的字符串和字符数组有什么区别?
【发布时间】:2014-02-16 07:55:58
【问题描述】:

当我检查这两个是否相等时,它们显然不是。谁能解释一下原因?

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

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

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

【问题讨论】:

    标签: javascript variables


    【解决方案1】:

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

    您正在使用strict comparison (===),它还会检查值的数据类型。显然 primitive string 值与 object 的数据类型不同,并且对象仅与它们自己真正相等。证明:

    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

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

    类数组是什么意思?这意味着该对象具有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
    

    *:实际上,原始字符串和字符串对象之间甚至是有区别的,但我不想在这里说得太深。从技术上讲,原始字符串没有任何方法,因为它们不是对象,但在大多数情况下,您可以将原始字符串视为对象。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        更多信息请访问Strict equality using ===

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

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

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

            arr = anotherArray;
            

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

            arr[0] = 'S';
            

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-09-17
              • 2013-06-19
              • 2017-06-26
              相关资源
              最近更新 更多