Cocos Creator_JavaScript权威指南(第六版)_第3章_类型、值和变量

JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object typt)。
原始类型包括数字、字符串和布尔值。null(空)和undefined(未定义)是两个特殊的原始值,它们通常分别代表了各自特殊类型的唯一的成员。
除此之外的就是对象了。对象是属性的集合,每个属性都由“名/值对”(值可以是原始值,也可以是对象)构成。其中一个比较特殊的对象–全局对象。6
普通的JavaScript对象是“命名值”的无序集合。JavaScript同样定义了一种特殊对象–数组(Array),表示带编号的值的有序集合。JavaScript为数组定义了专用的语法,是数组拥有一些和普通对象不同的特有行为特性。7
JavaScript还定义了另一种特殊对象–函数。函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果。和数组一样,函数的行为特征和其他对象都不一样。JavaScript为使用函数定义了专用语法。对于JavaScript函数来讲,最重要的是,他们都是真值,并且JavaScript可以将他们当做普通对象来对待。8
如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数。每个构造函数定义了一类对象–由构造函数初始化的对象组成的集合。类可以看做是对象类型的子类型。除了数组类和函数类之外,JavaScript语言核心定义了其他三种有用的类。日期类定义了代表日期的对象。正则类定义了表达正则表达式(一种强大的模式匹配工具,10)的对象。错误类定义了那些表示JavaScript程序中运行时错误和语法错误的对象。可以通过定义自己的构造函数来定义需要的类。9
JavaScript解释器有自己的内存管理机制,可以自动对内存进行垃圾回收。这意味着程序可以按需创建对象,程序员则不必担心这些对象的销毁和内存回收。当不再有任何引用指向一个对象,解释器就会知道这个对象没用了,然后自动回收它所占用的内存资源。(GC机制)
JavaScript是一种面对对象的语言。不严格地讲,这意味着我们不用全局的定义函数去操作不同类型的值,数据类型本身可以定义方法来使用值。
a.sort(); //sort(a)的面对对象的版本
从技术上讲,只有JavaScript对象才能拥有方法。然而,数字、字符串和布尔值也可以拥有自己的方法。在JavaScript中,只有null和undefined是无法拥有方法的值。
JavaScript的类型可以分为原始类型和对象类型,也可分为拥有方法的类型和不能拥有方法的类型,同样可分为可变类型和不可变类型。可变类型的值是可以修改的。对象和数组属于可变类型:JavaScript程序可以更改对象属性值和数组元素的值。数字、布尔值、null和undefined属于不可变类型–比如,修改一个数值的内容本身就说不通。字符串可以看成有字符组成的数组,你可能会认为它是可变的。然而在JavaScript中,字符串是不可变的:可以访问字符串任意位置的文本,但JavaScript并为提供修改已知字符串的文本内容的方法。
JavaScript可以自由地进行数据类型转换。比如,如果在程序期望使用字符串的地方使用了数字,JavaScript会自动将数字转换为字符串。如果在期望使用布尔值的地方使用了非布尔值,JavaScript也会进行相应的转换。类型转换规则将在3.8中讲述。JavaScript中灵活的类型转换规则对“判断相等”的定义亦有影响。
JavaScript变量是无类型的,变量可以被赋予任何类型的值,同样一个变量也可以重新赋予不用类型的值。使用var关键字来声明变量。JavaScript采用语法作用域。不在任何函数内声明的变量称作全局变量,它在JavaScript程序中的任何地方都是可见的。在函数内声明的变量具有函数作用域,并且只有函数内可见。

3.1 数字
JavaScript不区分整数值和浮点数值。JavaScript中的所有数字均用浮点数值表示。JavaScript采用IEEE 754 标准定义的64位浮点格式表示数字,这意味着他能表示的最大值是±1.797693134862315710的308次方,最小值是±510的负324次方。
按照JavaScript中的数字格式,能够表示的整数范围是从-2的53次方~2的53次方,包含边界值。如果使用了超过此范围的整数,则无法保证低位数字的精度。然而需要注意的是,JavaScript中实际的操作(比如数组索引,以及第四章中的位操作符)则是基于32位整数。
当一个数字直接出现在JavaScript程序中,我们称之为数字直接量。JavaScript支持多种格式的数字直接量,注意,在任何数字直接量前添加负号(-)可以得到它们的负值。但负号是一元求反运算符,并不是数字直接量语法的组成部分。

3.1.1 整数直接量
在JavaScript程序中,用一个数字序列表示一个十进制整数。
除了十进制的整型直接量,JavaScript同样能识别十六进制值。所谓十六进制的直接量是指以“0x”或“0X”为前缀,十六进制值是0至9之间的数字和a(A)至f(F)之间的字母构成。
尽管ECMAScript标准不支持八进制直接量,但JavaScript的某些实现可以允许采用八进制形式表示整数。
由于某些JavaScript的实现支持八进制直接量,而有些不支持,因此最好不要使用以0为前缀的整型直接量,毕竟我们也无法得知当前JavaScript的实现是否支持八进制的解析。在ECMAScript 6的严格模式下,八进制直接量是明令禁止的。

3.1.2 浮点型直接量
6.02e23 //6.02 * 10的23次方
6.02E-32 //6.02 * 10的负23次方

3.1.3 JavaScript中的算术运算
JavaScript程序是使用语言本身提供的算术运算符来进行数字运算的。除了基本的运算符外,JavaScript还支持更加复杂的算术运算,这些复杂运算通过最为Math对象的属行定义的函数和常量来实现:
Math.pow(x,y) x的y次幂
第三部分中关于Math对象的介绍,那里列出了JavaScript所支持的所有数学函数。
PS:JavaScript中的算术运算在溢出(overflow)、下溢(underflow)或被零整除时不会报错。当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大(infinity)值,在JavaScript中以Infinity表示。同样地,当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大,以—Infinity表示。无穷大值的行为特性和我们所期望的是一致的。
下溢是当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候发生的一种情况。这种情况下,JavaScript将会返回0。当一个负数发生下溢时,JavaScript返回一个特殊的值“负零”。这个值几乎和正常的零完全一样,一般很少用到负零。
已知被零整除在JavaScript并不报错:它只是简单的返回无穷大。但有一个例外,零除以零是没有意义的,这种整除运算结果也是一个非数字值,用NaN表示。无穷大除以无穷大、给任意负数作开方运算或者算术运算符与不是数字或无法转换为数字的操作数一起使用时都将返回NaN。
JavaScript预定义了全局变量Infinity和NaN,在ECMAScript 3中,这两个值是可读/写的,并可修改。ECMAScript 5修正了这个错误,将他们定义为只读的。
JavaScript中的非数字值有一点特殊:他和任何值都不相等,包括自身。也就是说,没有办法通过x==NaN来判断变量x是否是NaN。相反,应当使用x!=NaN来判断,当且仅当x为NaN的时候,表达式的结果才为true。函数isNaN()的作用与此类似,如果参数是NaN或者是一个非数字值(比如字符串和对象),则返回true。JavaScript中有一个类似的函数isFinite(),在参数不是NaN、Infinity或-Infinity的时候返回true。
负零值同样有些特殊,它和正零值是相等的。这意味着这两个值几乎一模一样,除了作为除数之外.

3.1.4 二进制浮点数和四舍五入错误
在JavaScript的真实运行环境中,0.3-0.2 = 0.099 999 999 999 999 98。
二进制浮点数表示法并不能精确表示类似0.1这样简单的数字。
PS:在任意使用二进制浮点数的编程语言中都会有这个问题。这种计算结果可以胜任大多数的计算任务:这个问题也只有在比较两个值是否相等的时候才会出现。
JavaScript的未来版本或许会支持十进制数字类型以避免这些蛇人问题。

3.1.5 日期和是时间
JavaScript语言核心包括Date()构造函数,用来创建表示日期和时间的对象。日期对象不象数字那样:

        var then
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值