JavaScript - 字符串原语值(String Primitive)与字符串对象(String Object)



主要参考


String Primitive与String Object的直观区分

  • String Primitive包括:

    • 由引号包裹的字符串值,如"abc"

    • 转换函数String()返回的字符串值,如String("abc")

  • String Object包括:

    • 通过new操作符创建的String对象,如new String("abc")
  • 直观区别:类型不同

    typeof "abc"; // string
    typeof String("abc"); // string
    typeof new String("abc"); // object
    

应用区别

主要体现在作为eval()的参数值时,结果返回不同(当然慎用eval()

  • String Primitive将被作为源码执行:

    eval("2 + 2"); // number 4
    
  • String Object仅作为对象被传入后原样返回

    eval(new String("2 + 2")); // object String { "2 + 2" }
    

转换关系

  • String Primitive -> String Object

    当需要调用String对象的方法或执行属性查找时,JavaScript会自动将String Primitive转换为String Object,因此可直接调用相应方法:

    "abc".charAt(1); // b
    
  • String Object -> String Primitive

    • 通过转换方法String()转换:

      typeof String(new String("abc")); // string
      
    • 通过对象未被重载的valueOf()toString()方法

      typeof new String("abc").toString(); // string
      typeof new String("abc").valueOf(); // string
      

posted @ 2018-09-13 16:02  JustKidding  阅读(247)  评论(0)    收藏  举报