[Effective JavaScript 笔记] 第一章:让自己习惯javascript小结
2016-05-12 19:05
585 查看
在这里整理一下,每条对应的提示
确保使用的js特性是应用程序支持的(要不写了也运行不了)
总是在严格模式下编写和测试代码(面向未来编程)
合并代码时注意不同声明的严格模式(还是用第二种解决方案吧,省心)
js的整数仅仅是双精度浮点数的一个子集,不是单独的一个类型
位运算将数字视为32位的有符号整数
当心浮点运算的精度问题
运算符+是进行加法运算还是字符串连接操作取决于参数类型。
valueOf强制转换为数字,toString强制转换为字符串
实现valueOf方法的对象,应该实现一个toString方法返回valueOf方法返回值的字符串表示
测试一个值是否未定义,应该使用typeof或者直接与undefined比较,不应该使用真值运算
获取和设置原始类型的属性会隐式地创建封装对象。每次都会创建一个新的封装对象,所以设置的值不会保留。
使用===运算符,可以避免记住那些强制转换规则,使代码更清晰。
当比较不同类型的值时,最好显式地进行强制转换,使程序行为更清晰。
仅在紧接着的标记不能被解析的时候插入分号
在以(、[、+、-、/字符开头的语句前绝不能省略分号
当脚本文件进行连接时,在脚本开头加上防御性的分号
在return、throw、 break 、continue、 ++、 --的参数之前绝不能换行
分号不能作为for循环的头部或空语句的分隔符而自动插入
js使用两个代码单元表示216及其以上的Unicode代码点。这两个代码单元被称为代理对。
代理对甩开了字符串元素计数,length,charAt,charCodeAt方法及正则表达式模式受到了影响。
使用第三方的库编写可识别代码点的字符串操作。
每当使用一个含有字符串操作的库时,都需要查阅该库文档,看好像处理代码点的整个范围。
第1条:了解使用的js版本
确定应用程序支持的js的版本(浏览器也是应用程序噢)确保使用的js特性是应用程序支持的(要不写了也运行不了)
总是在严格模式下编写和测试代码(面向未来编程)
合并代码时注意不同声明的严格模式(还是用第二种解决方案吧,省心)
第2条:理解JavaScript的浮点数
js的数字都是双精度的浮点数js的整数仅仅是双精度浮点数的一个子集,不是单独的一个类型
位运算将数字视为32位的有符号整数
当心浮点运算的精度问题
第3条:当心隐式的强制转换
类型错误会被隐式的强制转换隐藏运算符+是进行加法运算还是字符串连接操作取决于参数类型。
valueOf强制转换为数字,toString强制转换为字符串
实现valueOf方法的对象,应该实现一个toString方法返回valueOf方法返回值的字符串表示
测试一个值是否未定义,应该使用typeof或者直接与undefined比较,不应该使用真值运算
第4条:原始类型优于封闭对象
当做相等比较时,原始类型的封装对象与其原始值行为不一样。原始值一定等于原始值,封装对象不等于相同的值的封装对象。“mm”==”mm” ; new String(“mm”) != new String(“mm”)获取和设置原始类型的属性会隐式地创建封装对象。每次都会创建一个新的封装对象,所以设置的值不会保留。
第5条:避免对混合类型使用==运算符
当参数类型不同时,==运算符应用了一套难以理解的隐式强制转换规则。使用===运算符,可以避免记住那些强制转换规则,使代码更清晰。
当比较不同类型的值时,最好显式地进行强制转换,使程序行为更清晰。
第6条:了解分号插入的局限
仅在“}”标记之前、一行的结束和程序的结束处自动插入分号仅在紧接着的标记不能被解析的时候插入分号
在以(、[、+、-、/字符开头的语句前绝不能省略分号
当脚本文件进行连接时,在脚本开头加上防御性的分号
在return、throw、 break 、continue、 ++、 --的参数之前绝不能换行
分号不能作为for循环的头部或空语句的分隔符而自动插入
第7条:视字符串为16位的代码单元序列
js字符串是由16位的代码单元组成,而不是由Unicode代码点组成。js使用两个代码单元表示216及其以上的Unicode代码点。这两个代码单元被称为代理对。
代理对甩开了字符串元素计数,length,charAt,charCodeAt方法及正则表达式模式受到了影响。
使用第三方的库编写可识别代码点的字符串操作。
每当使用一个含有字符串操作的库时,都需要查阅该库文档,看好像处理代码点的整个范围。
相关文章推荐
- [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列
- 原生JS实现tab切换
- angular-messages.js
- js
- jeecg 中标签<t:formvalid>处理的js代码
- JS-native交互<一>
- js跨域访问
- 全面理解JavaScript中的闭包
- 滑块(JSlider)与进度条(JProgressBar)
- javascript DOM操作
- 01--好的json解析
- Jsp的换行
- JSP页面的生命周期
- JSON.parse()和JSON.stringify()
- 第28篇 js中let和var
- JSON
- jsp显示计算数值, 四舍五入
- 【JavaScript】正则表达式删除代码注释
- 【JavaScript】对象结构的简化--删除Json中的空属性、空数组
- 【JavaScript】 判断空对象区别于null、undefined