JavaScript入门(二)
递增和递减操作符对任何值都适用,前置与后置的区别与C语言中的区别相同
所有数值都以 IEEE-754 64 位格式存储,位操作符并不直接操作 64 位的值。而是先将 64 位的值转换成 32 位 的整数,然后执行操作,最后再将结果转换回 64 位,对特殊的 NaN 和 Infinity 值应用位操作时,这两个值都会被当成 0 来处理
有一个操作数不是布尔值的情况 下,逻辑与操作以及逻辑或操作就不一定返回布尔值,二者都是短路操作,可以利用逻辑或的这一行为来避免为变量赋 null 或 undefined 值
相等和不相等这两个操作符都会先转换操作数再比较它们的相等性,null == undefined 会返回 true,如果两个操作数都是对象,则比较它们是不是同一个对象
全等和不全等这两个操作符在比较之前不转换操作数,推荐使用全等和不全等操作符
流控制语句有if语句、do-while语句、while语句、for语句、for-in语句、label语句、break语句、continue语句、switch语句
with 语句的作用是将代码的作用域设置到一个特定的对象中,目的主要是为了简化多次编写同一个对象的工作,但不建议使用
函数使用 function 关键字来声明,后跟一组参数以及函数体,不必指定是否返回值,推荐的做法是要么让函数始终都返回一个值要么永远都不要返回值,否则会给调试带来不便
在函数体内可以通过 arguments 对象来 访问这个参数数组,所有参数传递的都是值
函数不能像传统意义上那样实现重载
变量可能包含两种不同数据类型的值,基本类型值指的是 简单的数据段,而引用类型值是保存在内存中的对象,可以为其添加属 性和方法,也可以改变和删除其属性和方法
当从一个变量向另一个变量复制引用类型的值时,两个变量实际上将引用同一个对象
使用 instanceof 操作符,如果变量是给定引用类型的实例,那么就会返回true
执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有一个 与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中,虽然我们 编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它
全局执行环境被认为是 window 对象,内部环境可以通过作用域链访问所有的外部环境,但 外部环境不能访问内部环境中的任何变量和函数,使用 var 声明的变量会自动被添加到最接近的环境中
JavaScript 没有块级作用域
优化内存占用的最佳方式,就是为执行 中的代码只保存必要的数据,一旦数据不再有用,最好通过将其值设置为 null 来释放其引用
对象是某个特定引用类型的实例,新对象是使用 new 操作符后跟一个构造函数来创建的
创建 Object 实例也可以使用对象字面量表示法,这样能够简化创建 包含大量属性的对象的过程,开发人员更青睐这种方法,这种方法也是向函数传递大量可选参 数的首选方式
使用方括号表示法来访问对象的属性,这样的主要优点是可以通过变量来访问属性
数组的每一项可以保存任何类型的数据,数组的 length 属性不是只读的,通过设置这个属性可以从数组的末尾移 除项或向数组中添加新项
Array.isArray()方法终确定某个值到底是不是数组,数组拥有栈方法push()和pop(),队列方法shift()和unshift(),重排序方法sort()和reverse(),还有concat(),slice(),splice(),indexOf(),lastIndexOf()方法
数组的迭代方法有every(),filter(),forEach(),map(),some(),归并方法有reduce(),reduceRight()
Date类使用毫秒数来保存日期
通过 RegExp 类型来支持正则表达式,var expression = / pattern / flags ;
由于 RegExp 构造 函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义
正则表达式字面量始终会共享同一个 RegExp 实例,而使用构造函数创建的每一个新 RegExp 实例都是一个新实例,RegExp 对象的主要方法是 exec(),第二个方法是 test()
每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法,函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定
没有重载,声明两个同名函数,则后面的函数会覆盖前面的函数
除了什么时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的
函数也可以作为值来使用,callSomeFunction()函数是通用的,函数对象的 caller 属性保存着调用当前函数的函数的引用
在函数内部,有两个特殊的对象即 arguments 和 this,arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数,this 引用的是函数据以执行的环境对象,在调用函数之前, this 的值并不确定
每个函数都包含两个 属性:length 和 prototype,length 属性表示函数希望接收的命名参数的个数,prototype 是引用类型保存它们所有实例方法的真正所在
每个函数都包含两个非继承而来的方法:apply()和 call(),这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值来能够扩充函数赖以运行的作用域
函数的 bind() 方法会创建一个函数的实例,其 this 值会被绑定到传给 bind() 函数的值
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,这些基本包装类型的对象只存在于一 行代码的执行瞬间,然后立即被销毁
不建议直接实例化Boolean和Number类型
Global 对象有URI编码方法、eval()方法、以及很多属性,在全局作用域中声明的所有变量和函数,就都成为了 window 对象的属性
Math对象有min()和max()方法,ceil()、floor()和round()舍入方法,random()方法,还有很多其他方法