学习笔记1
写在前面
已经有过几个月的比较集中的前端开发基础,然后觉得既然学一个东西那就要学好吧,所以看一下这个书。会对里面的东西记一下,但是并不会面面俱到,只是对我还不熟悉或者容易混淆的东西。前两章省略。
第三章
- 标识符
- 第一个字符:字符,下划线,美元
- 驼峰大小写格式
- 严格模式
- 顶部加入”use strict”
- 一些不确定行为将得到处理,对某些不安全的操作也会抛出错误
- 变量是松散型,可以用来保存任何类型的数据
- 省略var操作符,变成全局变量
function test() {
message = "hi"; // global
}
- 数据类型
- 五种简单的数据类型: undefined null boolean number string
- typeof 返回 以上(除了null)或者object
- undefined: 使用var声明变量但未对其加以初始化。只有一个值。
- null: typeof返回为object。只有一个值。
- null == undefined // true
- boolean: true不一定1,false不一定0
- number
- 浮点数
- ECMAScript会不失时机地将浮点数值转换为整数值
- var a = 10.0 –> 解析为10,整数
- var floatNum = 3.125e7 // e表示法
- -Infinity Infinity 负无穷和正无穷
- NaN
- 0除以0返回NaN
- 不与任何值相等,包括NaN本身
- 数值转换
- 非数值转为数值:Number(), parseInt(), parseFloat()
- Number()
- Boolean: 1 and 0
- null: 0
- undefined: NaN
- string
- 十六进制可转,为十进制
- 前导零被忽略,所以八进制不行
- 有别的字符:NaN
- parseInt
- 十六进制可以,转为十进制
- 低版本ECMAScript支持八进制,高版本不支持
- 可以给第二个参数,表示输入的进制
parseInt("af", 16);
- parseFloat
- 只解析十进制,始终忽略前导零
- 浮点数
- string
- 字符串是不可变
- 几乎每个值都有toString()方法
- object
- 每个object示例都有下列属性方法
- Constructor: 保存着创建当前对象的函数
- hasOwnProperty(propertyName):检查是否存在
- isPrototypeOf(object):是否另一个对象原型
- toLocaleString
- toString
- valueOf 通常与toString返回值相同
- 每个object示例都有下列属性方法
- 操作符
- >> 有符号右移
- >>> 无符号右移
- 同时使用两个!,模拟Boolean转型函数
- 乘法
- NaN = NaN
- Infinity * 0 = NaN
- Infinity * pos = Infinity, Infinity * neg = -Infinity
- 如果有一个操作数不是数值,后台调用Number()转为数值
- 除法
- 0 / 0 = NaN
- 非零有理数 / 0 = Infinity/-Infinity
- 如果有一个操作数不是数值,后台调用Number()转为数值
- 加法
- Infinity + (-Infinity) = NaN
- 0 + (-0) = 0
var result2 = 5 + "5";// "55"
- 关系操作符
- 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值
- 大写字符的字符编码全部小于小写字母的字符编码
- 全部转换为大写或者小写后再比较
- 如果字符串里面是数字,会和想要的结果不一样
- 相等操作符
- 相等和不相等——先转换再比较
- 全等和不全等——仅比较而不转换
- 相等和不相等
- == !=
- boolean - > number
- string & number -> number & number
- object & others -> object.valueOf() & others
- 全等和不全等
- === !==
- “55” == 55 //true
- “55” === 55 // false
- 语句
- for-in语句
- for (property in expression) statement
- 属性名顺序不可预测
- 函数
- arguments参数。不在乎多少参数个数
- 所有参数传递都是值,不可能通过引用传递参数
- 不能重载
第四章
var num1 = 5;
var num2 = num1;
- num1和num2是完全独立的.
- 对于object来说,指向的是一样的
var obj1 = new Object()
var obj2 = obj1
obj1.name = "Nocholas"
alert(obj2.name) // "Nicholas"
- 改变obj1之后,obj2也会改变
- 向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
- 作用域加长
- try-catch语句的catch块
- with语句
- Js没有块级作用域
- 垃圾收集
- 自动垃圾收集机制
- 找出那些不再继续使用的变量,释放其占用的内存。会按照固定的时间间隔周期性的执行。
- 标记清除
- 进入环境,标记为“进入环境”。离开环境时,标记为“离开环境”
- 会在运行的时候给存储在内存中的所有变量都加上标记,然后去掉环境中的变量以及被环境中的变量引用的变量的标记
- 引用计数
- 循环引用的问题
- IE性能问题:IE的垃圾收集器是根据内存分配量运行的。