《深入理解JavaScript》——1.4 值

    xiaoxiao2024-01-04  172

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

    1.4 值

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

      

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

     

    这段代码也可以写为:

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

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

      

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

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

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

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

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

    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)按值进行比较

    内容比较:

    (2)不可改变

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

      

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

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

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

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

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

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

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

    对象具有以下特点。

    (1)按引用进行比较

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

     

    (2)默认可变

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

      

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

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

    丢失的参数也会是undefined:

     

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

     

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

      

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

      

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

    typeof用法形如:

      

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

     

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

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

    instanceof用法形如:

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

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)