【问题标题】:Is there a difference between String(x) and ''String(x) 和 '' 有区别吗
【发布时间】:2015-10-15 17:12:52
【问题描述】:

有区别吗?字符串 2 会继承不同的对象原型吗?

var s1 = 1234 + '';
var s2 = String(1234);

//s1.someNewFunc();   error?
//s2.someNewFunc();

谢谢

【问题讨论】:

    标签: javascript


    【解决方案1】:

    Javascript 允许您将原始值视为对象。它通过将原语动态强制转换为对象来实现。这就是为什么,即使原语没有属性,像这样的东西也很好:

    "abcde".substr(1,3); //bcd
    true.valueOf(); //true
    

    【讨论】:

      【解决方案2】:

      两者的行为方式相同。

      此外,这里有一个关于字符串原语与对象的很好的解释:

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

      字符串原语和字符串对象的区别

      [...] 字符串文字(用双引号或单引号表示)和从非构造函数上下文中的 String 调用返回的字符串(即,不使用 new 关键字)是原始字符串。 JavaScript 自动将原语转换为 String 对象,因此可以将 String 对象方法用于原语字符串。 [...]

      【讨论】:

        【解决方案3】:
        var s1 = 1234 + '';
        

        创建一个字符串文字。这是一个javascript语言原语。

        var s2 = String(1234);
        

        String() 函数还返回原始字符串文字。 s2 将具有与 s1 相同的成员,因为它们都是相同的类型。

        然而

        var s3 = new String("1234");
        

        将创建一个 String 类型的对象,而不是原始字符串字面量。这确实有不同的成员并且是对象类型。

        【讨论】:

        • 该死的......现在我更困惑于使用哪个!
        • 别担心。 new String() stackoverflow.com/questions/5750656/… 没什么用处,我只需要使用字符串文字就可以了。
        • @Dude2TheN 我建议只对原始类型使用文字。创建自己的对象时,我会使用new myObject(...)
        【解决方案4】:

        同样的事情!

        var s1 = 1234 + '';
        var s2 = String(1234);
        
        typeof s1   //string
        typeof s2   //string
        

        【讨论】:

          猜你喜欢
          • 2019-03-25
          • 2010-11-08
          • 2020-11-13
          • 2011-07-19
          • 1970-01-01
          • 2013-09-18
          • 1970-01-01
          • 1970-01-01
          • 2010-12-29
          相关资源
          最近更新 更多