ES6典型語法示例(ReactNative語法入門)

ReactNative的語法基礎(chǔ)要求JS,JSX,ES6.其中ES6是這三種語法的核心.系統(tǒng)學(xué)習(xí)ES6的語法是ReactNative編程的基本要求.下面記錄ES6的典型語法的示例,以方便編程中的隨時(shí)查用.
1定義變量, 關(guān)鍵字const, var, let. let定義的變量,作用域?yàn)榇a塊;var定義的變量,作用域能穿透后面代碼塊;const修改的變量不可修改;
let a = 1;
var b = 'string';
const c = 2;

let和var在for循環(huán)使用中的區(qū)別:

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

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

2變量的解構(gòu)賦值.對(duì)變量復(fù)制時(shí),當(dāng)?shù)忍?hào)左邊定義的變量和等號(hào)右邊的賦值形式一致時(shí),能夠?qū)ψ兞孔詣?dòng)賦值;
let {a, b} = {a:"x", b:"y"};
//a = x, b = y;
let [a, b] = [0, 1, 2, 3];
//a=0, b = 1;
let [a, ...b] = [0, 1, 2, 3];
//a=0, b = [1,2,3];
3操作字符串.
(1)遍歷

for(i of 'hello') {
      console.log(i);
 }
//
[info][tid:com.facebook.react.JavaScript] h
[info][tid:com.facebook.react.JavaScript] e
[info][tid:com.facebook.react.JavaScript] l
[info][tid:com.facebook.react.JavaScript] l
[info][tid:com.facebook.react.JavaScript] o

(2)引用

var a = 'hello'
    var ch =  a.charAt(1);
    console.log(ch);
//e

(3)判斷

var a = 'hello'
    a.startsWith('he')//true
    a.startsWith('lo')//true
    a.includes('ll')//true

(4)引用(使用右上頓號(hào))

var a = 'Hello'
    console.log(`${a} world!`)

4操作數(shù)值
(1)判斷

//是否是非無窮大
Number.isFinite(15)//true
Number.isFinite('a')//true
Number.isFinite(NaN)//false
//是否是整數(shù)
Number.isInteger(15)//true
Number.isInteger('15')//false

(2)轉(zhuǎn)化

Number.parseInt("12.34") // 12
Number.parseFloat('123.45#') // 123.45

(3)Math應(yīng)用

//去除小數(shù)部分
Math.trunc(1.2)//1
Math.trunc(-1.2)//-1
//數(shù)字符號(hào),正數(shù)為+1,負(fù)數(shù)為-1,0位0
Math.sign(-1)//-1
Math.sign(1)//+1
Math.sign(0)//0

5操作數(shù)組

(1)創(chuàng)建
var arr = ['a', 'b', 'c'];
var arr1 = Array.from('a', 'b', 'c');//['a', 'b', 'c']
var arr2 = Array.from({ 0: "a", 1: "b", 2: "c"});//['a', 'b', 'c']
var arr3 = Array.of('a', 'b', 'c')//['a', 'b', 'c']
(2)查找
var arr = [0, 1, 2, 3];
    //返回第一個(gè)滿足條件的值
    var result = arr.find((value, index, arr) => {
      return value > 1;
    })
    console.log(result);//2
//返回第一個(gè)滿足條件值的索引
    var resultIndex = arr.findIndex((value, index, arr) => {
      return value > 2;
    });
    console.log(resultIndex);//3
(3)遍歷
    for (let index of ['a', 'b'].keys()) {
      console.log(index);
    }
// 0
// 1

    for (let elem of ['a', 'b'].values()) {
      console.log(elem);
    }
// 'a'
// 'b'

    for (let [index, elem] of ['a', 'b'].entries()) {
      console.log(index, elem);
    }
// 0 "a"
// 1 "b"

6操作對(duì)象

(1)定義
var obj = {
      name: 'Lily',

      speak(){
        console.log(`My name is `+ this.name);
      }
    }
    obj.speak();//My name is Lily
(2)添加屬性和方法
obj['age'] = 10;
    console.log(obj['age']);
obj.speakAge = function(){
      console.log('My age is ' + this.age);
    }
    obj.speakAge();

7定義函數(shù)

(1)一般定義方式
function foo() {
      console.log('first function');
    }
(2)簡(jiǎn)化定義方式(ES6推薦寫法)
var foo = () => {
      console.log('another function');
    }
(3)函數(shù)的rest參數(shù)
var foo = (x, y, ...z) => {
      console.log(x, y, z);
    }

    foo(1,2,3,4,5);
//1, 2, [ 3, 4, 5 ]

8Set和Map數(shù)據(jù)類型
類似OC中的NSSet和NSDictionary,是ReactNative中兩種常用的基本數(shù)據(jù)類型.

(1)Set能保證里面元素的唯一性
>1 定義
let setOne = new Set();
//接受數(shù)組參數(shù)
let setTwo = new Set([0, 1, 2, 2]);//[0, 1, 2]
>2 屬性和方法
setTwo.size;//3 獲取元素個(gè)數(shù)
setTwo.add(3);//添加
setTwo.delete(3);//刪除
setTwo.has(2);//true查找
>3 遍歷
    for (i of setTwo.keys()) {
      console.log('keys:  ' + i);
    }

    for (i of setTwo.values()) {
      console.log('values:  ' + i);
    }

    for ([key, value] of setTwo.entries()) {
      console.log('key:  ' + key +  '   value   ' + value);
    }
//
keys:  0
keys:  1
keys:  2
values:  0
values:  1
values:  2
key:  0   value   0
key:  1   value   1
key:  2   value   2
(2)Map是key和value一一對(duì)應(yīng)的鍵值對(duì)
>1定義
    let m = new Map();
    let m2 = new Map([['name', 'Lily'], ['age', 10]]);
>2屬性和方法
    m2.get('name');//Lily
    m2.set('name', 'Json');
    m2.size;//2
    m2.has('name');//true
    m2.delete('name');//true
    m2.clear();
//
keys:  name
keys:  age
values:  Lily
values:  10
key:  name   value   Lily
key:  age   value   10

9Generator函數(shù)
通過在函數(shù)名前添加*和在方法中添加yield關(guān)鍵字來定義,控制函數(shù)的順序執(zhí)行.

function *genFun() {
      yield 'Lily';
      yield 'Json';
      return 'Niu';
    }
    let gen = genFun();
    genFun().next();//{value: 'Lily', done: false}
    genFun().next();//{value: 'Json', done: false}
    genFun().next();//{value: 'Niu', done: true}
//可以使用for of 語句來遍歷
for (i of gen) {
      console.log(i);
    }
//return后的元素,不會(huì)被遍歷到
Lily
Json

10Promise對(duì)象
通過定義Promise和關(guān)鍵字then的結(jié)合,可以方便實(shí)現(xiàn)函數(shù)的成功回調(diào)和失敗回調(diào).

(1)定義
    var prom = new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log('download success')
        resolve('success');
      }, 1000);
    });

    prom.then((flag) => {
      console.log('success block:' + flag);
    }, (error) => {
      console.log('failure block:' + error);
    })
(2)async關(guān)鍵字和Promise實(shí)例相結(jié)合,實(shí)現(xiàn)多個(gè)異步線程的順序執(zhí)行;
    async function foo() {
      await new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve();
        }, 5000);
      });

      console.log('await function completed');
    }
    foo();
//打印消息會(huì)在5s后resolve回調(diào)執(zhí)行后,才執(zhí)行;

11Class和Module
弱模塊一直是JS令人詬病的地方.現(xiàn)在ES6中,可以通過import命令,可以方便引用其他Module.

<1>class的定義
    class Person {
      constructor(name, age) {
        this.name = name;
        this.age = age;
      }

      set personName(name) {
        this.name = name;
      }

      get personName() {
        return this.name;
      }

      speak() {
        console.log(`My name is ${this.name}, my age is ${this.age}`);
      }
    }
<2>class的繼承
    class Student extends Person {
      constructor(name, age, grade) {
        super(name, age);
        this.grade = grade;
      }

      speak() {
        super.speak();
        console.log(`My grade is ${this.grade}`);
      }
    }
<3>class的靜態(tài)方法
    class Person {
      static eat() {
        console.log('I eat every day!');
      }
    }
    Person.eat();
module模塊的導(dǎo)入
//person.js文件
export var firstName = 'Json';
export var secondName = 'Frank';
export var age = 18;

export  default function speak () {
    console.log('I am a Person');
}
//main.js文件中導(dǎo)入
import speak, {firstName, secondName, age} from './person';
//將對(duì)象導(dǎo)出,只需要在前面加上關(guān)鍵字export即可.由于export default默認(rèn)導(dǎo)出的設(shè)置,speak名字可以不同,如下:
import speakAnother, {firstName, secondName, age} from './person';

以上語法是結(jié)合對(duì)項(xiàng)目進(jìn)行ReactNative改造后,總結(jié)出來的需要掌握的基本語法.掌握以上語法,對(duì)一個(gè)簡(jiǎn)單ReactNative項(xiàng)目,能夠更快理解和上手操作,希望幫助到需要的小伙伴.
以上內(nèi)容均節(jié)選自電子書ES6新語法,繼續(xù)深入學(xué)習(xí),可以詳細(xì)翻閱.

喜歡和關(guān)注都是對(duì)我的支持和鼓勵(lì)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子岸霹,更是在濱河造成了極大的恐慌,老刑警劉巖裁蚁,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矢渊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡枉证,警方通過查閱死者的電腦和手機(jī)矮男,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刽严,“玉大人昂灵,你說我怎么就攤上這事避凝∥杼眩” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵管削,是天一觀的道長(zhǎng)倒脓。 經(jīng)常有香客問我,道長(zhǎng)含思,這世上最難降的妖魔是什么崎弃? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮含潘,結(jié)果婚禮上饲做,老公的妹妹穿的比我還像新娘。我一直安慰自己遏弱,他們只是感情好盆均,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漱逸,像睡著了一般泪姨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饰抒,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天肮砾,我揣著相機(jī)與錄音,去河邊找鬼袋坑。 笑死仗处,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枣宫。 我是一名探鬼主播疆柔,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼镶柱!你這毒婦竟也來了旷档?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤歇拆,失蹤者是張志新(化名)和其女友劉穎鞋屈,沒想到半個(gè)月后范咨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂庇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年渠啊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片权旷。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡替蛉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拄氯,到底是詐尸還是另有隱情躲查,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布译柏,位于F島的核電站镣煮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鄙麦。R本人自食惡果不足惜典唇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胯府。 院中可真熱鬧介衔,春花似錦、人聲如沸骂因。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侣签。三九已至塘装,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影所,已是汗流浹背蹦肴。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猴娩,地道東北人阴幌。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卷中,于是被迫代替她去往敵國(guó)和親矛双。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持蟆豫,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券议忽,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,027評(píng)論 3 37
  • 特別說明十减,為便于查閱栈幸,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 562評(píng)論 0 0
  • let 和 const 命令 let 命令 塊級(jí)作用域 const 命令 頂層對(duì)象的屬性 gl...
    安小明閱讀 978評(píng)論 0 0
  • 新事物很多 很多 不要以為擁有一樣新事物你就以為真的擁有 大意失荊州愤估? 沒這么嚴(yán)重 往往會(huì)有一些小懲罰 教會(huì)我要正...
    翹首比肩閱讀 209評(píng)論 0 0