变量
初始化变量的时候并不会标记该变量的类型,初始化的过程就是仅仅给变量附一个值,因此可以在修改变量值的同时修改值的类型。
例如:
var msg = 'amy';
msg = 719; //有效但不推荐
用var操作符定义的变量将成为定义该变量的作用域中的局部变量。当它退出该作用域的时候,其被销毁。
在不使用var的时候声明变量相当于全局变量,但是不推荐这样做,比较难维护,在严格模式下,不用var 或者 let const 声明的话,会抛出ReferenceError错误。
数据类型
五种简单类型【Undefined, Null, Boolean, String, Number】+一种复杂类型【Object】
所有值最终都是属于这六种类型中的某一个。
Undefine未定义或者未初始化,都会是undefine,但未定义,使用会报错。
Null 被看做是obj的一个空指针,一个特点是 typeof Null 结果为object
Object的每个实例都会有以下属性和方法:
constructor(): 用于保存创建该对象(实例)的方法
hasOwnProperty(name): 判断给定的属性是否存在于当前对象中,参数为字符串。
isPrototypeOf(obj): 用于检查传入的对象是否是当前实例的原型。
propertyIsEnumerable(name): 给定的属性是否能使用 for-in语句来枚举。参数为字符串
toLoacaleString(): 返回对象的字符串表示。
toString()
ValueOf(): 和toString 一样 null和undefine没有toString方法,但可以用ValueOf();
将一个function调用String方法时,会先去调用它的toString()方法,如果toString方法不存在,则去调用ValueOf()方法。
可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数,甚至改变,但是在严格模式下,arguments是不能改变参数的, 能改变的原因只是因为,值的同步,并不是因为指向同一块内存区域。
由于不存在函数签名的特性(任意传递参数),所有函数是没有重载的。