javascript优化--01高质量编码
javascript的浮点数:
- Javascript的数字都是双精度浮点数;
- 64位编码数字;
- 能表达53位精度的整数;
- 进行位运算时会隐式地转化为32位整数(0,1序列)后计算;
- 浮点数运算可能会有精度问题,最好是都用整数计算;
严格模式:考虑到兼容性问题,可以用将自身包裹在立即调用的函数表达式里再连接其他文件;
判断NaN:判断自身是否全等;
对象隐式转换:
- 一般对象通过valueOf方法强制转化为数字,通过toString方法强制转化为字符串;
- 在两者都有的情况下,对象会选择valueOf;
- 所以既有valueOf方法的对象应该实现toString,来返回valueOf方法产生的数字的字符串形式;
输出日期方法:
function toYMD(date) {
var y = date.getYear() + 1900,
m = date.getMonth() + 1,
d = date.getDate();
return y
+ '/' + (m < 10 ? '0' + m : m)
+ '/' + (d < 10 ? '0' + d : d);
}
分号插入规则:
- 只能在一行,一个或多个换行之后和程序输入结尾省略分号;
- 分号仅在随后的输入标记不能解析时插入;
- 注意下一行开头为: ( [ + - /
- 注意如果换行会强制增加分号的情况: reutrn; throw; 后置自增减;break; continue;
- 分号不会作为分隔符在for循环空语句的头部自动加入
视字符串为16位的代码单元序列
- Javascript字符串由16位的代码单元组成,而不是由Unicode代码点注册;
- Javascript使用两个代码单元表示2^16及其以上的Unicode代码点,这两个代码单元称为代理对;
- 代理对会影响字符串元素计数,length,charAt,charCodeAt方法及正则表达式模式(如:'.')受到影响;
- 当使用一个含有字符串操作的库时,要查看文档弄清其如何处理代码点的整个范围;
- 可以使用第三方编写可识别代码点的字符串操作,如:URI操作函数sendcodeURI,decodeURI,encodeURIComponent,decodeURIComponent;
使用闭包:
- JS允许引用当前函数以外定义的变量;
- 即使外部函数返回,当前函数任然可以使用外部函数定义的变量;
- 闭包可以更新外部变量的值;
变量声明提升:
- 在代码块中的变量声明会被隐式地提升到封闭函数的顶部,可以考虑手动提升变量声明;
- Js没有块级作用域,一个例外是try..catch语句将捕获的异常绑定到一个变量,该变量的作用域只是catch语句块;
使用立即调用函数表达式创建局部作用域:
function wrap(a) {
var result = [], i , n;
for(i = 0, n = a.length; i < n; i++) {
result[i] = function() {return a[i]};
}
return result;
}
var f = wrap([0,1,2]);
上例中reuslt[i]中i储存的是i的值,但function() {return a[i]}这个闭包中的i储存的是外部i的引用;所以最后返回f中i的值都为3;
使用立即调用函数表达式:
function wrap(a) {
var result = [], i , n;
for(i = 0, n = a.length; i < n; i++) {
(function(j) {
result[i] = function() {return a[i]};
})(i);
}
return result;
}
注意IIFE中:
- 代码块不能包含任何跳出块的break和continue;
- 使用this,argument会改变它们的含义;
javascript优化--01高质量编码的更多相关文章
- javascript优化--04高质量编码
库和API的设计: 在参数设计中保持好的习惯:如顺序,width,height;top,right,bottom,left;如命名: 将undefined看作没有值而不要表示非特定的值: 在允许0,空 ...
- javascript优化--02高质量编码
方法调用: 通常某个对象调用方法查找该方法并将该对象作为该方法的接受者(this): 使用call自定义接受者 可以调用在给定对象中不存在的方法: 定义高阶函数,允许使用者给回调函数指定接受者: 使用 ...
- javascript优化--03高质量编码
使用Object的直接量实例构造轻量级的字典: 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环:(考虑到兼容性,如Array.pro ...
- (第一章)改善JavaScript,编写高质量代码。
根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...
- (第二章)改善JavaScript,编写高质量代码。
建议34:字符串是非值操作 var a = "javascript"; var b = a; b = b.toUpperCase(); alert(a); //javascript ...
- 编写高质量JavaScript代码的68个有效方法
简介: <Effective JavaScript:编写高质量JavaScript代码的68个有效方法>共分为7章,分别涵盖JavaScript的不同主题.第1章主要讲述最基本的主题,如版 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...
- 高质量JavaScript代码书写基本要点
翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...
- [转] 翻译-高质量JavaScript代码书写基本要点 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:St ...
随机推荐
- js实现剪切、复制、粘贴——clipBoard.js
摘要: 最近项目上要实现一个点击按钮复制链接的功能,刚开始查找了一些资料,找了几款插件,ZeroClipboard是通过flash实现的复制功能,随着越来越多的提议废除flash,于是就想能不能通过j ...
- 模板插件aTpl
摘要: 前面给大家分享了一款js模板插件,后来经过完善推荐给大家.该插件支持ie5+,chrome等浏览器以及移动端浏览器,支持for和if语法,以及表达式. 项目地址:https://github. ...
- 解读JSP的解析过程
解读JSP的解析过程 互联网上,这方面的资料实在太少了,故把自己研究的一些结果公布出来. 首先,问大家几个问题,看大家能不能回答出来,或者在网上能不能找到答案: 1.page.include.tagl ...
- cocos2dx 安卓编译问题收集
问题: 新的cocos2d-x 2.2.5 在使用Eclipse的安卓NDK 9 的编译器进行编译的时候,问题提示如下: [armeabi] Compile++ thumb: cocos_extens ...
- Ubuntu 16.04 下安装Firefox的Flash插件
在ubuntu系统环境下面打开优酷视频,发现无法播放视频.Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持续的迷人用户体验.绝妙的音频/ ...
- 不同版本的name可以重复
- validates :name, presence: true, uniqueness: { conditions: -> { where(:state.ne => 2) } }, l ...
- Centos6.7安装Apache2.4+Mysql5.6+Apache2.4
首先说下思路,因为一开始系统上已经跑了一套完成的 PHP 环境,那时候都是快速自动安装的,如果是跑一些5.3以下版本的话,很简单,几个指令,10分钟搞定了. 但现在要升级,彻底一点的话,唯有推倒重来了 ...
- linux下cp目录时排除一个或者多个目录的方法
说明:/home目录里面有data目录,data目录里面有a.b.c.d.e五个目录,现在要把data目录里面除过e目录之外的所有目录拷贝到/bak目录中 系统运维 www.osyunwei.com ...
- NGINX userid 分析、解码
NGINX userid 分析.解码 生成userid的代码在 http/modules/ngx_http_userid_filter_module.c 大概550行左右. uid_set 是4个ui ...
- C++纯虚函数
本文较为深入的分析了C++中虚函数与纯虚函数的用法,对于学习和掌握面向对象程序设计来说是至关重要的.具体内容如下: 首先,面向对象程序设计(object-oriented programming)的核 ...