ES6学习(待续)

转载 (原文地址) yiXiaoWang 随笔 ES6 637阅读 2015-06-26 19:36:38 举报

一、测试方法:

我使用的是Traceur转码器和Babel转码器。
使用Traceur直接在网页中引入:
    [code]<!-- 加载Traceur编译器 -->

<script src="http://google.github.io/traceur-compiler/bin/traceur.js"; type="text/javascript"></script>

<!-- 将Traceur编译器用于网页 -->
<script src="http://google.github.io/traceur-compiler/src/bootstrap.js"; type="text/javascript"></script>[/code]

或者直接利用Node安装    Babel:
    [code]npm install --global babel[/code]
安装之后直接可以运行js文件
    [code]babel-node es6_test.js[/code]
es6_test.js如下:
[code]class Circle {
area(x){
        return Math.PI * x * x;
}

}

var c1 = new Circle();
console.log(c1.area(5));[/code]

二、开始学习

1.let命令
    ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。let不存在变量提升,而var会将变量定义提前。ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些命令,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
    [code]

var a = [];
for( var i = 0; i < 10; i ++){
a[i] = function(){
console.log(i);
}
}

a[3](); //10

var a = [];
for( let i = 0; i < 10; i ++){
a[i] = function(){
console.log(i);
}
}

a[3](); //3

[/code]

2.const声明的常量,也与let一样不可重复声明。const声明de是常量,不能被改变。
3.[code]const Person = {};
Person.name = "xxxxxx";
Person.run = function(){
    console.log(Person.name);
}
//delete Person.name;
//delete Person.run;
Person.run();[/code]

[code]const a = [];
a.push("Hello"); // 可执行
a.length = 0; // 可执行
a = ["Dave"]; // 报错[/code]
上面代码中,常量a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错。

4.如果真的想将对象冻结,应该使用Object.freeze方法。
[code]const foo = Object.freeze({});

foo.prop = 123; // 不起作用[/code]

5.上面代码中,常量foo指向一个冻结的对象,所以添加新属性不起作用。

除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数。

[code]var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, value) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};[/code]

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复