typeof可以用来检测给定变量的数据类型,typeof是一个操作符而不是函数,所以圆括号可以省略。
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
undefined的主要目的是用于比较。第三版引入这个值是为了正式区分空对象指针与未经初始化的变量。
Null类型是第二个只有一个值得数据类型,这个特殊的值是null。
从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回“object”的原因。
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们进行相等性测试要返回true:null==undefined//true
Boolean类型的字面值true和false是区分大小写的,也就是说,True和False都不是Boolean值,只是标识符。
八进制在严格模式下是无效的,会导致支持的javascript引擎抛出错误。
关于浮点数计算会产生舍入误差的问题,有一点需要明确:这是使用IEEE754数值的浮点数计算的通病。a+b==0.3//不要做这样的测试,舍入误差会导致无法测试特定的浮点数。
数值范围(大多数浏览器中):Number.MIN_VALUE(5e-324),Number.MAX_VALUE(1.7976931348623157e+308),如果某次计算结果超出数值范围则将被自动转换为特殊的Infinitity值,如果这个值是负数转换为-Infinitity,如果为正数转换为Infinitity。
Infinitity不能够参与计算。
NaN即非数值(Not a Number)是一个特殊的数值。
NaN特点:(1)任何涉及NaN的操作都会返回NaN。(2)NaN与任何值都不相等,包括NaN本身。
数值转换:Number()、parseInt()、parseFloat()三个函数可以把非数值转换为数值,其中第一个可以用于任何数据类型,另外两个专门用于把字符串转换成数值。
字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
Object属性和方法:
Constructor:构造函数
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。
isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示
valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
ECMAScript对象的属性没有顺序。因此,通过for-in循环输出的属性名的顺序是不可预测的。
with语句的作用是将代码的作用域设置到一个特定的对象中。严格模式中不允许使用with语句,否则将视为语法错误。with会导致性能下降。
ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中包含哪些参数。在函数内部可以使用arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
ECMAScript函数的一个重要特点:命名的参数只提供便利,但不是必须的。另外,在命名参数方面,其他语言可能事先创建一个函数签名,而将来调用必须与该签名一致。但是在ECMAScript中没有这些条条框框。
arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
ECMAScript中的所有的参数传递的都是值,不可能通过引用传递参数。
ECMAScript函数不能像传统意义上那样实现重载。
如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。
实际上,未指定返回值的函数返回的是一个特殊的undefined值。