4.原始类型优于封装对象

除对象之外,JavaScript有5个原始值类型:布尔值、数字、字符串、null和undefined。同时标准库提供了构造函数来封装布尔值、数字和字符串作为对象。你可以创建一个String对象,String对象是真正的对象。

var s = new String("hello");
s + " world"; // hello world
s[4]; // "o"
typeof "hello"; // "string"
typeof s; // "Object"

由于每个String对象都是一个独立的对象,其总是只等于自身。

var s1 = new String("hello");
var s2 = new String("hello");
s1 == s2; // false
s1 === s2; // false

当对原始值提取属性和进行方法调用时,它表现得就像已经使用了对应的对象封装了该值一样。

"hello".toUpperCase(); // "HELLO"

你可以对原始值设置属性,但是对其丝毫没有影响。

"hello".someProperty = 17;
"hello".somProperty; // undefined

每次隐式封装都会产生一个新的String对象,更新第一个封装对象并不会造成持久的影响。对原始值设置属性是没有意义的。

提示

  • 当做相等比较时,原始类型的封装对象与其原始值行为不一样。
  • 获取和设置原始类型值的属性会隐式地创建封装对象。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,224评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,786评论 18 399
  • 绝大多数的人是不知道自己会死的,大都认为死亡是别人的事。 我们先来了解两个基本概念:心智和谛念。心智,每个人都有,...
    任若水阅读 1,100评论 3 1
  • 洋洋对着婆婆的遗像说“我也觉得......我也老了”的时候泪如泉涌,仿佛年华一帧一帧的逝去。 《一一》是这两年除了...
    JellyBeann阅读 365评论 0 0
  • 写下这样一个题目不是为了证明我读过村上春树的这本叫做《当我跑步时我谈些什么》的书,而想说是有时候我们真的需要放下手...
    李老四lilaofour阅读 455评论 0 2