《深入理解JavaScript》——1.4 值

简介:

本节书摘来自异步社区《深入理解JavaScript》一书中的第1章,第1.4节,作者: 【美】AxelRauschmayer(罗彻麦尔)译者: 王玉林 , 杜欢 , 庄婷婷 , 章子鹏,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 值

JavaScript有很多值,都是我们预期的编程语言的值:布尔值、数字、字符串、数组等。在JavaScript中所有的值都有属性。每一个属性都有一个key(或者是name)和一个value。可以认为,属性就像是一条记录的字段。通过点(.)操作符可以读取属性:

  screenshot

例如,字符串'abc'有length这个属性:

 screenshot

这段代码也可以写为:

screenshot

点操作符同样可以用于给属性赋值:

screenshot

我们也可以通过点操作符来调用方法:

  screenshot

在上面的示例中,我们在值hello上调用了toUpperCase()方法。

1.4.1 原始值和对象
JavaScript中,对值的区分有点自由。

原始值包括布尔值、数字、字符串、null和undefined。
其他的值都是对象。
这两者之间最主要的区别在于它们的比较方式;每个对象都有唯一的标识且只(严格地)等于自己:

screenshot

相反,所有的原始值,只要编码值相同,则被认为相等:

screenshot

后面两节将更详细地介绍原始值和对象。

1.4.2 原始值
以下即为所有的原始值(或简称为primitives)。

布尔值:true、false(参见1.5“布尔值”)
数字:20156、1.351(参见1.6“数字”)
字符串:'dh'、"abc"(参见1.8“字符串”)
两个“空值”:undefined、null(参见1.4.4“undefined和null”)
原始值具有以下特点。

(1)按值进行比较

内容比较:

screenshot

(2)不可改变

其属性不能被改变、添加或移除:

  screenshot

(读取一个未知属性时,总会返回undefined。)

1.4.3 对象
所有的非原始值都是对象。最常见的对象如下。

简单对象,可以通过对象字面量来创建(参见1.14.1“单一对象”):
screenshot

上述对象有两个属性:属性firstName的值是Jane,属性lastName的值是Doe。

数组,可以通过数组字面量来创建(参见1.15“数组”):
  screenshot

上面的数组有3个元素,可以通过数字索引来访问它们。例如,'apple'的索引是0。

正则表达式,可以通过正则表达式字面量来创建(参见1.16“正则表达式”):
screenshot

对象具有以下特点。

(1)按引用进行比较

比较身份标识;每个值都有各自的身份标识:

 screenshot

(2)默认可变

对象属性可以很自由地被改变、添加和移除(参见1.14.1“单一对象”):

  screenshot

1.4.4 undefined和null
大多数编程语言都会有一些值去表示丢失的信息。JavaScript有两个类似的“空值”,undefined和null。

undefined的意思是“没有值”。未被初始化的变量即为undefined:
 screenshot

丢失的参数也会是undefined:

 screenshot

访问不存在的属性,也会得到undefined:

 screenshot

null的意思是“没有对象”。在用到对象的时候它表示空值(例如参数、对象链中的最后一个元素等)。
警告:
 undefined和null没有属性,甚至连toString()这种标准方法都没有。
检查undefined或null
通常,函数允许透过undefined或null来表示缺失的值。可以通过以下显式的检查来做到同样的事情:

  screenshot

也可以利用undefined和null都可被视为false这一事实来处理:

  screenshot

警告:
 false, 0, NaN, 和 '' 都可被视为false(参见1.5.1“真值与假值”)。
1.4.5 使用typeof和instanceof对值分类
有两种对值进行分类的操作符:typeof主要用于原始值,instanceof用于对象。

typeof用法形如:

  screenshot

它的返回值会是一个表示这个值“类型”的字符串。如以下示例:

 screenshot

表1.1列出了typeof会得到的所有结果:
screenshot

typeof null返回object是一个不能去修正的bug,因为这会破坏现有的代码。但这并不表示null是一个对象。

instanceof用法形如:

screenshot

如果value是一个通过Constr构造器创建的对象,则返回true(参见1.14.5“构造函数:对象工厂”)。如以下示例:

screenshot

相关文章
|
3月前
|
JavaScript 前端开发 安全
深入理解JavaScript数据类型转换
深入理解JavaScript数据类型转换
45 2
|
JavaScript 前端开发 算法
深入理解JavaScript——数组
我们在前文系列中,我们以内置构造函数 Object 开始讲起,并从中衍生出各种知识点。而后我们又讲另一个大构造函数 Function,同样引出了比肩 Object 的知识点。这两者之后,笔者认为JavaScript的大厦已经建成,只是天边还有两朵小乌云,今天我们就讲其中的一朵——数组
97 0
深入理解JavaScript——数组
|
JSON JavaScript 前端开发
深入理解JavaScript-一切皆对象
深入理解JavaScript-一切皆对象
145 0
深入理解JavaScript-一切皆对象
|
Web App开发 JavaScript 前端开发
深入理解JavaScript——字符串
深入理解JavaScript——字符串
59 0
|
JavaScript 前端开发 API
深入理解JavaScript——循环都来这儿
写这篇文章真的很痛苦,因为我的心已经不在这里。前前后后花了一周时间才撬动键盘
93 0
|
JavaScript 前端开发 API
深入理解JavaScript- new 做了什么
上文我们就 Object 进行分析阐述,聊到了对象的创建,其中 new 是创建对象的重要关键字,这节我们讲讲 new,聊一聊 new 是做什么用的
140 0
|
JavaScript 前端开发 开发者
深入理解JavaScript函数
深入理解JavaScript函数
96 0
|
JavaScript 前端开发

热门文章

最新文章