下面我就為大家帶來一篇淺析JavaScript 箭頭函數 generator Date JSON。現在就分享給大家,也給大家做個參考。
ES6 標準新增了一個新的函數: Arrow Function(箭頭函數)。
x => x *x 上面的箭头相当于: function (x){ return x*x; }
箭頭函數相當於匿名函數,並且簡化了函數定義。一種像上面的,只包含一個表達式,
連{ ... }和return都省略掉了。還有一個可以包含多個語句,這時候就不能省略{ ... }和return:
x =>{ if(x > 0){ return x * x; }else{ return -x *x; } }
如果參數不是一個,就需要用括號()括起來:
// 两个参数 (x,y) => x*x + y *y // 无参数; () =>3.14 // 可变参数 (x,y,...rest) =>{ var i, sum = x +y; for(i=0;i<rest.length;i++){ sum += rest[i]; } return sum; }
this
現在,箭頭函數完全修復了this的指向,this總是指向詞法作用域,也就是外層呼叫者obj:
var obj = { birth:1990, getAge:function(){ var b = this.birth; // 1990 var fn = () => new Date().getFullYear() - this.birth; // this指向obj 对象。 return fn(); } } obj.getAge(); // 25
如果使用了箭頭函數,以前的那種hack 寫法;
var that = this;
就不再需要了。
由於this 在箭頭函數中已經按照是否作用域綁定了,所以,用call() 或apply() 呼叫箭頭函數時,無法對this 進行
綁定,即傳入的第一個參數被忽略。
var obj = { birth:1990, getAge:function(year){ var b = this.burth; // 1990 var fn = (y) =>y-this.birth; // this.birth 仍是1990 return fn.call({birth:2000},year); } }; obj.getAge(2015); // 25
generator
generator(生成器)是ES6標準所引入的新資料型別。一個generator看起來像一個函數,但可以返回多次。
function* foo(x){ yield x +1; yieldx + 2; return x +3; }
generator 和函數不同的是,generator由function* 定義(注意多出的*號),並且,除了return 語句,還可以用yield 返回多次。
函數只能回傳一次,所以碧璽回傳一個Array. 但是,如果換成generator,就可以一次回傳一個數,不斷回傳多次。
function* fib(max){ var t, a = 0, b=1, n=1; while (n < max){ yield a; t = a +b; a = b; b = t; n++; } return a; }
直接呼叫試試:
fib(5); // fib {[[GeneratorStatus]]: "suspended", [[GeneratorReceiver]]: Window}
直接呼叫一個generator和呼叫函數不一樣,fib(5)只是創建了一個generator對象,還沒有去執行它。
呼叫generator物件有兩個方法,一是不斷呼叫generator物件的next()方法:
var f = fib(5); f.next(); // {value: 0, done: false} f.next(); // {value: 1, done: false} f.next(); // {value: 1, done: false} f.next(); // {value: 2, done: false} f.next(); // {value: 3, done: true}
Date
#在JavaScript 中,Date 物件用來表示日期和時間的。 要取得系統目前時間,用:
var now = new Date(); now; //// Wed Jun 24 2015 19:49:22 GMT+0800 (CST) now.getFullYear(); //2015,年份 now.getMonth(); // 5,月份,注意月份范围为0~11,5表示六月 now.getDate();// 24 ,表示24 号 now.getHours(); // 3,表示星期三 now.getMinutes(); // 19 ,24小时制 now.getSeconds(); // 22,秒 now.getMilliseconds(); //875 毫秒 now.getTime(); // 1435146562875, 以number形式表示的时间戳 如果要创建一个执行日期和时间的Date对象,可以用: var d = new Date(2015,5,19,20,15,30,123); d;// Fri Jun 19 2015 20:15:30 GMT+0800 (CST)JSON
JSON是JavaScript Object Notation的縮寫,它是一種資料交換格式。 在JSON中,一共就這麼多種資料型別:1,number: 和JavaScript的number 完全一致;2,boolean: 就是JavaScript的true或false;3,String: 就是JavaScript的String ;4,null: 就是JavaScript的null;5,array: 就是JavaScript 的Array 表示方式—— [];6,object: 就是JavaScript 的{...} 表示方式。
SON也定死了字元集必須是UTF-8,表示多語言就沒有問題了。為了統一解析,JSON的字串規定必須用雙引號"",Object的鍵也必須用雙引號""。
序列化
var guagua = { name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-school': '\"W3C\" Middle School', skills: ['JavaScript', 'Java', 'Python', 'Lisp'] }; JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null," middle-school":"\"W3C\" Middle School","skills": ["JavaScript","Java","Python","Lisp"]}'結果:
{ "name": "小明", "age": 14, "gender": true, "height": 1.65, "grade": null, "middle-school": "\"W3C\" Middle School", "skills": [ "JavaScript", "Java", "Python", "Lisp" ] }第二個參數用於控制如何篩選物件的鍵值,如果我們只想輸出指定的屬性,可以傳入Array:
JSON.stringify(xiaoming, ['name', 'skills'], ' ');
結果:{ "name": "guagua", "skills": [ "JavaScript", "Java", "Python", "Lisp" ] }還可以傳入一個函數,這樣物件的每個鍵值對都會被函數先處理:
function convert(key, value) { if (typeof value === 'string') { return value.toUpperCase(); } return value; } JSON.stringify(guagua, convert, ' ');上面的程式碼把所有屬性值都變成大寫:
{ "name": "guagua", "age": 14, "gender": true, "height": 1.65, "grade": null, "middle-school": "\"W3C\" MIDDLE SCHOOL", "skills": [ "JAVASCRIPT", "JAVA", "PYTHON", "LISP" ] }如果我們還想要精確控制如何序列化小明,可以給xiaoming定義一個toJSON()的方法,直接回傳JSON應該序列化的資料:###反序列化########拿到一個JSON格式的字串,我們直接用JSON.parse() 把它變成一個JavaScript 物件:###
JSON.parse('[1,2,3,true]'); //[1,2,3,true] JSON.parse('{"name":"瓜瓜","age":14}'); // Object{name:'瓜瓜',age:14} JSON.parse('true'); // true JSON.parse('123.45'):// 123.45 JSON.parse()还可以接收一个函数,用来转换解析出的属性: JSON.parse('{"name":"guagua","age":14}',function(key,value){ //把number * 2 if(key ==='name'){ return value + '同学' } return value; }) ; // Object{name: '瓜瓜同学',age: 14}###上面是我整理給大家的,希望今後會對大家有幫助。 ######相關文章:#########深入瞭解JavaScript中的區塊級作用域、私有變數與模組模式(圖文教學)############ JavaScript 輸出顯示內容(基礎的教學)############Javascript 普通函數與建構函式的差異(結合程式碼,詳細解讀)######
以上是詳細解讀JavaScript 箭頭函數 generator Date JSON的詳細內容。更多資訊請關注PHP中文網其他相關文章!