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高质量编码的更多相关文章

  1. javascript优化--04高质量编码

    库和API的设计: 在参数设计中保持好的习惯:如顺序,width,height;top,right,bottom,left;如命名: 将undefined看作没有值而不要表示非特定的值: 在允许0,空 ...

  2. javascript优化--02高质量编码

    方法调用: 通常某个对象调用方法查找该方法并将该对象作为该方法的接受者(this): 使用call自定义接受者 可以调用在给定对象中不存在的方法: 定义高阶函数,允许使用者给回调函数指定接受者: 使用 ...

  3. javascript优化--03高质量编码

    使用Object的直接量实例构造轻量级的字典: 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环:(考虑到兼容性,如Array.pro ...

  4. (第一章)改善JavaScript,编写高质量代码。

    根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...

  5. (第二章)改善JavaScript,编写高质量代码。

    建议34:字符串是非值操作 var a = "javascript"; var b = a; b = b.toUpperCase(); alert(a); //javascript ...

  6. 编写高质量JavaScript代码的68个有效方法

    简介: <Effective JavaScript:编写高质量JavaScript代码的68个有效方法>共分为7章,分别涵盖JavaScript的不同主题.第1章主要讲述最基本的主题,如版 ...

  7. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  8. 高质量JavaScript代码书写基本要点

    翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...

  9. [转] 翻译-高质量JavaScript代码书写基本要点 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:St ...

随机推荐

  1. 一步一步教你将普通的wifi路由器变为智能广告路由器

    一步一步教你将普通的wifi路由器变为智能广告路由器 相信大家对WiFi智能广告路由器已经不再陌生了,现在很多公共WiFi上网,都需要登录并且验证,这也就是WiFi广告路由器的最重要的功能.大致就是下 ...

  2. 机器学习公开课笔记(8):k-means聚类和PCA降维

    K-Means算法 非监督式学习对一组无标签的数据试图发现其内在的结构,主要用途包括: 市场划分(Market Segmentation) 社交网络分析(Social Network Analysis ...

  3. Loadrunner日志设置与查看

    1.打开EXtended Log Log告诉了我们一切,默认的Log是standard Log,这时远远不够的.我们要extended log,打开路径为runtime settings-->l ...

  4. Internet信息服务找不到

    最近我的电脑也出现了Internet信息服务找不到的情况,在网络上查了很多方法都没一个正确的,后面通过下面的方法我成功了,故此我把这个经历也分享给大家,希望能够帮到您. 控制面板里“->添加/删 ...

  5. unity3d 日志捕捉

    public class Test : MonoBehaviour { public string output = ""; public string stack = " ...

  6. crontab添加定时任务

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) crontab是LINUX系统下的定时任务触发器,常用的方法如下: crontab -l    ...

  7. jquery消息提示框

    用于ajax类型提示的,只显示一个. 只是给个思路而已,代码有很多不足. 4个参数,有2个是可选 调用 $.mTip('类型','显示内容',显示时间,回调函数) 类型: 0 为加载 1 为成功 2 ...

  8. 见招拆招:绕过WAF继续SQL注入常用方法

    Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过.WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招.那今天我在这里做个小小的扫盲吧.先来说说 ...

  9. ZeroMQ(java)中组件间数据传输(Pipe的实现)

    在ZeroMQ(java)中,整个IO的处理流程都是分层来进行的,当然处于最下端的肯定是前面介绍过的poller以及StreamEngin了....涉及到上层的话就还有session,以及socket ...

  10. 【云计算】docker registry v2简介

    ubuntu docker方式部署docker registry v2 2016-03-03 17:36 by JackieHan, 4 阅读, 0 评论, 收藏,  编辑 生成自己签名的证书 生成签 ...