1997年 正式成为国际标准,官方名称为ECMAScript。

1999年 定稿第3版ECMAScript标准(简称ES3),最广泛的js版本。

2009年 发布第5版即ES5,引入了一些新特性,标准化了一些被支持了但没规范的特性。目前还未得到广泛支持,书中会特别说明一些条款和建议是否是特定于ES5的。

(ES6,现在都出来了,但我是在看这本书,就不多说了,继续。)

如:const (ES5不支持但ES6是支持的就不多说这个啦,查ES6吧)。

js并不只针对浏览器WEB编程,现在还有NODEJS,浏览器扩展,针对移动和桌面应用程序的脚本。对于各应用场景需要的JS版本各有不同。

这本书主要是关注的是JS的标准特性,也会讨论一些不标准的。讲到不标准的时候会特别说明。

ES5引入严格模式语法如下:

“use strict”;

低版本忽略,因为这就是一个字符串,没有任何操作。高版本会对代码执行严格模式。这个字符串可以放到JS文件的最开头,或函数体的最开头。

加了这个不能重定义arguments,不能没声明就使用变量等。

编写健壮代码应对各种各样的代码合并及压缩,有两个可选方案。

第一个解决方案是不要将进行严格模式检查的文件和不进行严格模式检查的文件合并到一起。(不方便,得时刻注意,不利于后期使用工程化的构建工具)

“use strict”;

//code

第二个解决方案通过将其自身包裹在立即执行的函数表达式中合并多个文件。(哪使哪放),恰好和流行的模块系统类似。

(function(){

“use strict”;

//code;

})();

编写文件使其在两种模式下行为一致。(这里要清楚哪些方法和语法在严格模式下不能用,会专门补充一篇相关的文章)

总结:

1、确定应用程序支持的js的版本(浏览器也是应用程序噢)

2、确保使用的js特性是应用程序支持的(要不写了也运行不了)

3、总是在严格模式下编写和测试代码(面向未来编程)

4、合并代码时注意不同声明的严格模式(还是用第二种解决方案吧,省心)

[Effective JavaScript笔记]第1条:了解使用的js版本的更多相关文章

  1. [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象

    js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...

  2. [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符

    “1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...

  3. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

    函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...

  4. [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

    js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...

  5. [Effective JavaScript 笔记]第68条:使用promise模式清洁异步逻辑

    构建异步API的一种流行的替代方式是使用promise(有时也被称为deferred或future)模式.已经在本章讨论过的异步API使用回调函数作为参数. downloadAsync('file.t ...

  6. [Effective JavaScript 笔记]第46条:使用数组而不要使用字典来存储有序集合

    对象属性无序性 js对象是一个无序属性集合. var obj={}; obj.a=10; obj.b=30; 属性a和属性b并没有谁前谁后之说.for...in循环,先输出哪个属性都有可能.获取和设置 ...

  7. [Effective JavaScript 笔记]第45条:使用hasOwnProperty方法以避免原型污染

    之前的43条,44条讨论了属性的枚举,但都没有彻底地解决属性查找中原型污染的问题.看下面关于字典的一些操作 'zhangsan' in dict; dict.zhangsan; dict.zhangs ...

  8. [Effective JavaScript 笔记]第67条:绝不要同步地调用异步的回调函数

    设想有downloadAsync函数的一种变种,它持有一个缓存(实现为一个Dict)来避免多次下载同一个文件.在文件已经被缓存的情况下,立即调用回调函数是最优选择. var cache=new Dic ...

  9. [Effective JavaScript 笔记]第66条:使用计数器来执行并行操作

    第63条建议使用工具函数downloadAllAsync接收一个URL数组并下载所有文件,结果返回一个存储了文件内容的数组,每个URL对应一个字符串.downloadAllAsync并不只有清理嵌套回 ...

  10. [Effective JavaScript 笔记]第65条:不要在计算时阻塞事件队列

    第61条解释了异步API怎样帮助我们防止一段程序阻塞应用程序的事件队列.使用下面代码,可以很容易使一个应用程序陷入泥潭. while(true){} 而且它并不需要一个无限循环来写一个缓慢的程序.代码 ...

随机推荐

  1. 01.C#数据类型、排序、过滤(一章1.1-1.2)

    随着看的文章及探讨越多,越发现自己实在太不定性了,看下<C#深入理解>吧,做一下读书笔记,从中发现自己的不足.闲话不说,进入正题吧. 在C#1中定下一个简单的数据类型 public cla ...

  2. UItableView的编辑--删除移动cell

    // // RootViewController.m // UI__TableView的编辑 // // Created by dllo on 16/3/17. // Copyright © 2016 ...

  3. u11-nav01

    <header id="masthead" class="masthead" role="banner"> <nav cl ...

  4. 【codevs 1296】营业额统计 水~~

    今天下午先写一个Splay水题来复习一下Splay模板.是不是有点太水了做这种水题我有点良心不安. 可笑的是一开始我竟然WA了一组,看来是我低估水题的数据范围了,我是空节点直接返回inf或-inf,明 ...

  5. int和integer的比较

    程序代码: Integer i01 = 59; int i02 = 59; Integer i03 =Integer.valueOf(59); Integer i04 = new Integer(59 ...

  6. 【CodeForces 557B】Pasha and Tea

    题 题意 总共有 w 克蛋糕,2n 个盘子,第 i 个盘子容量为 ai ,n 个女孩和 n 个男孩,男孩得到的是女孩得到的蛋糕的两倍,求他们得到蛋糕的最大值. 分析 把盘子从小到大排序,然后 女生得到 ...

  7. BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图

    这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...

  8. 【bzoj1005】 HNOI2008—明明的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1005 (题目链接) 题意 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多 ...

  9. Oracle DBA从小白到入职实战应用

    现如今Oracle依然是RDBMS的王者,在技术上和战略上,Oracle仍然一路高歌猛进,并且全面引领行业迈入了云时代,伴随着12cR2即将在2016年正式发布,学习Oracle之路依旧任重道远,目前 ...

  10. goto,void,extern,sizeof实例

    1.#include <stdio.h>void func(int n){    int* p = NULL;    if(  n < 0 )    {        goto ST ...