JavaScript的子集
ADsafe
dojix.secure
Caja
FEJS
Microsoft Web Sandbox
JavaScript的扩展
1. 常量和局部变量
- const
const用来声明一个常量,它的行为和var的行为十分相似,由于js中没有块级作用域,因此常量会被提前至函数定义的顶部。
任何对常量的重新赋值都会被忽略,重新声明常量也会报错。 - let
let的四种使用方式:
1.可以作为变量声明,和var一样
2.在for或for/in循环中,作为var的替代方案
3.在语句块中定义一个新变量并显示指定它的作用域
4.定义一个在表达式内部作用域中的遍历,这个遍历只在表达式内可用
!!通过var声明的变量在函数内部都是可用的,而通过let声明的变量则只属于就近的花括号括起来的语句块。
在声明语句中使用let和在循环初始化器中使用let的区别:
- 在声明语句中使用let变量初始化表达式是在变量的作用域内计算的。
- 在循环初始化器中变量的初始化表达式则是在变量的作用域之外计算的。
2. 解构赋值
在解构赋值中,等号右侧是一个数组或对象,指定左侧一个或多个变量的语法和右侧的数组和对象直接量的语法保持格式一致。
当发生非解构赋值时,右侧的数组和对象中一个或多个的值就会被提取出来,并赋值给左侧相应的变量名。
当函数返回一组结果时,使用解构赋值会简化很多。
- 解构赋值右侧的数组所包含的元素不必和左侧的变量一一对应,左侧多余的变量的赋值为undefined,而右侧多余的值则会忽略。
- 左侧的变量列表可以包含连续的逗号用以跳过右侧对应的值。
- 解构赋值的右侧也可以是一个对象。
//等价于let sin = Math.sin,cos = Math.cos,tan = Math.tan
let {sin:sin,cos:cos,tan:tan} = Math;
3.迭代
- for/each循环
for/each并不是遍历对象的属性,而是遍历属性的值:
let p = {one:1;two:2;three:3}
for(let p in o) console.log(p); //for/in:输出'one','two','three'
for each(let v in o)console.log(v) //for/each 输出1~3
当使用数组时,for/each循环遍历的元素,而不是索引:
a = ['one','two','three'];
for(let p in a) console.log(p); //prints array indexes 0,1,2
for each(let v in a) console.log(v); //prints array elts 'one',‘two’,'three' - 迭代器
- 迭代器是一个对象,这个对象允许对他的值集合进行遍历,并保持任何必要的状态以便能够跟踪到当前遍历的“位置”。
- 迭代器必须包含next()方法,每一次调用next()都返回集合中的下一个值。
- 当迭代器用于有限的集合时,当遍历完所有的值并且没有多余的值可迭代时,在调用nxt()方法会抛出StopIteration。Stoplteration是全局对象的属性,它的值是一个普通的对象,只是为了终结迭代的目的而保留的一个对象。
- 我们在创建一个可迭代的对象和它的迭代器的时候,尽管必须写一个itearator()方法并抛出一个StopIteration异常,但在正常使用时并不需要我们去手动调用iterator()方法或手动处理StopIteration异常,for/in循环会自己处理这种逻辑。
- Iterator()函数返回耳朵迭代器有两个重要的属性:
1.它只对自有属性进行遍历而忽略继承的属性
2.如果给Iterator()传入第二个参数true,返回的迭代器只对属性名进行遍历,而忽略属性值。
- 生成器
1.生成器用到了一个关键字yield,在函数内使用,用法和return类似,返回函数的一个值。
2.任何使用yield关键字的函数,都称为“生成器函数”。
3.生成器是一个对象,用以表示生成器函数当前的执行状态。它定义了一个next()方法,后者可恢复生成器函数的执行,直到遇到下一条yield语句为止。
4.生成器函数不需要返回。 - 数组推导
利用另外一个数组或可迭代对象来初始化数组元素。
数组推导语法:
【expression for( variable in object ) if ( condition )】 - 生成器表达式
将数组推导中的方括号替换成圆括号,他就成了一个生成器表达式,他的返回值是一个生成器对象,而不是一个数组。
生成器没有索引,为了得到第n个值,必须遍历他之前的n-1个值。 - 函数简写
表达式闭包:如果函数只计算一个表达式并返回它的值,关键字return和花括号都可以省略,并将待计算的表达式紧接着放在参数列表之后。
data.sort(function(a,b),b-a); //对数组按照数字大小顺序进行降序排列 - 多catch从句