react native的語法都是js的,看起來雲裏霧裏,今天開始,花幾天學習下js的語法,目前學習的文檔是ECMAScript 6 入門 作者:阮一峯。如果對於react native有更好的語法學習教材,請賜教。
1:let 命令
ES6新增了let命令,用來聲明變量。它的用法類似於var,但是所聲明的變量,只在let命令所在的代碼塊內有效。
不存在變量提升:let不像var那樣會發生“變量提升”現象。所以,變量一定要在聲明後使用,否則報錯。不允許重複聲明:let不允許在相同作用域內,重複聲明同一個變量。
2:塊作用域,這個對於java或者ios程序員來說,比較好理解,不用多說。
3:const命令
const
聲明一個只讀的常量。一旦聲明,常量的值就不能改變。
const
的作用域與let
命令相同:只在聲明所在的塊級作用域內有效。
對於複合類型的變量,變量名不指向數據,而是指向數據所在的地址。const
命令只是保證變量名指向的地址不變,並不保證該地址的數據不變,所以將一個對象聲明爲常量必須非常小心。
const foo = {};
foo.prop = 123;
foo.prop
// 123
foo = {}; // TypeError: "foo" is read-only
上面代碼中,常量foo
儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo
指向另一個地址,但對象本身是可變的,所以依然可以爲其添加新屬性。如果真的想將對象凍結,應該使用Object.freeze
方法。
const foo = Object.freeze({});
// 常規模式時,下面一行不起作用;
// 嚴格模式時,該行會報錯
foo.prop = 123;
4:全局對象的屬性
全局對象是最頂層的對象,在瀏覽器環境指的是window
對象,在Node.js指的是global
對象。ES5之中,全局對象的屬性與全局變量是等價的。這被認爲是ES5最大的設計敗筆,
ES6爲了改變這一點,一方面規定,爲了保持兼容性,var
命令和function
命令聲明的全局變量,依舊是全局對象的屬性;另一方面規定,let
命令、const
命令、class
命令聲明的全局變量,不屬於全局對象的屬性。也就是說,從ES6開始,全局變量將逐步與全局對象的屬性脫鉤。
var a = 1;
// 如果在Node的REPL環境,可以寫成global.a
// 或者採用通用方法,寫成this.a
window.a // 1
let b = 1;
window.b // undefined
ES5只有兩種聲明變量的方法:var
命令和function
命令。ES6除了添加let
和const
命令,後面章節還會提到,另外兩種聲明變量的方法:import
命令和class
命令。所以,ES6一共有6種聲明變量的方法。
學習文檔: ECMAScript 6 入門 作者:阮一峯