javascript
《你不知道的JavaScript》中卷 KYLE SIMPSON 著 单业 姜南 译
一部分? 類型和語法
1.內置類型(7)
null、undefined、boolean、number、string、object、symbol(ES6新增,符號)
2.toString()和Json.stringify()
(1)字符串、數字、布爾值和null的JSON.stringify()規則與toString基本相同
(2)如果傳遞給JSON.stringify()對象中定義了toJSON()方法,那么該方法會在字符串化前調用,以便將對象轉換為安全的JSON值。
3.a+''會對a調用valueOf()方法,String(a)則是調用toString()方法。
4.'44'==true;? ?//false? 原因把bool轉換為number,'44'==true? ? ==>? ? '44'==1? ?==>? ?44==1;???//false
5.""==0;//true? ? ? ""==[];//true? ? ?0==[];//true
注:(1)如果兩邊的值中有true或false(2)如果兩邊的值中有[]? ?""? 或者? 0,盡量不要使用==,可用===來避免不經意的強制類型轉換。
6.var a={b:42};? ? var b={b:43};
a<b;//false? ?a==b;//false? ?a>b;//false? ?a>=b;//true? a<=b;//true
a.b被轉化為[object? object],? ? ? ? ? a>=b? ==>? !(a<b)? ? ==>? true
7.var a=42;? ? a++;//42? a;//43? ?++a;//44? ?a;//44
8.運算符優先級 :? && > || > ?:
9.左關聯:? &&? ||
10.右關聯: ?:? ? =??
eg1(三目運算):? true?false:true?true:true;// false? ? ? ??true?false:(true?true:true);//false? ??(true?false:true)?true:true;// true? ? ? //說明三目運算是右關聯
eg2(賦值): var a,b,c;? ? a=b=c=42;? ?//首先執行c=42,然后b=...,最后a=...;
?
二次閱讀:
第一部分:類型和語法
第一章:類型
1.JavaScript的七種內置類型:null/undefined/string/number/boolean/object/symbol(es6新增)
(除對象為基本類型)
2.typeof可檢測:undefined/string/number/boolean/stymbol
3.null 檢測:var a=null ; ? !a && typeof a ==‘object’
4.function是object的‘子類型’
?
?
第二章。值
1.類數組轉化為數組:var arr=Array.prototype.slice.call(arguments);或 var arr=Array.from(arguments);
2. ? 0.1+0.2;//0.30000000000000004 ? .1+.2===.3;//false
?? ? 判斷方法,設置一個誤差范圍值:機器精度2^-52 Math.EPSILON.? ? Math.abs(.1+.2-.3)<Number.EPSILON;//true
3.void 返回值是undefined
4.NaN說js中唯一一個不等于自身的值:
if(!Number.NaN){
Number.NaN=function(n){
return n!=n;
}
}
5.Object.is(NaN,NaN);//true. Object.is(0,-0);//false. ? ? 注:能用==或===就別用Object.is(其效率不高)
?
?
第三章。原生函數
1.常用原生函數(內建函數):String()/Number()/Boolean()/Object()/Array()/Function()/RegExp()/Date()/Error()/Symbol()(es6新加)
? 注:Date要帶New關鍵詞,Symbol不帶new關鍵詞,其他可不帶new關鍵詞
2.Object.protyotype.toString.call()比typeof管用還可以判斷null/Undefined,eg:Object.prototype.toString.call(null);//"[object Null]"
?
?
第四章? 強制類型轉換
1.關于JSON:(1)undefined/function/symbol和包含循環引用(對象間相互引用形成無限循環)的對象都不符合JSON結構標準
(2)JSON.stringify(…)在對象中遇到undefined/function/symbol會自動將其忽略;在數組中會返回null(以保證單元位置不變)。
2.toJSON()返回一個能夠被字符串話的安全的JSON值,而不是JSON字符串。
3.轉化為Boolean(或!!):假值:undefined/null/false/+0/-0/NaN/‘’,除此之外都為true
4.+的隱士轉換:eg:(1).? ? +’3’;//3.? ? 1 +’3’;//4.? ? (2). ? +new Date();//時間搓。 ? es5:Date.now();//當前時間戳
5.~x等同于-(x+1);? ? eg:var a=‘hello’;? ~a.indexOf(’00’);//-0(即為false,其他為true可用判斷)?
6.var a=’42px’; ? Number(a);//NaN. ? parseInt(a);//42
7.parseInt()的第二個參數是進制,eg:parseInt(55,10)
8.var a=[3],b=[2];? a-b;//1? ? -運算類似于+。 字符串轉為數字
9.符號不能被強制轉化數字(隱式顯式都不行),但可以轉化為布爾(隱式顯式都可以)。eg:var a=Symbol;? a+’’;//報錯
10:==允許在相等比較中進行強制類型轉化,而===不允許。
11.null==undefined;//true. ? 除此之外Null.undefined他們自身相等。? null==false;//false. ? undefined==false;//false
12.var a={b:42};var b={b:43}; ? a<b;//false.? a>b;//false. a==b;//false ? a<=b;//true. a>=b;//true.? ? 比較時a/b轉化’[object object]’
?
?
第五章。語法
1.var a,b;? ? a=do{b=4+38};? ? a;//42
2.var a=42;? ++a;//43. ++43//報錯referenceError.? ++a++;//報錯referenceError
3.運算符執行順序:(1)&& > || > ?: > , (2)左關聯:&&/|| ? 右關聯:?:/=
4.函數參數:如果參數被省略或者值為undefined,則取該參數的默認值
5.try..finally:執行try后執行finally(無論如何都會執行finally);finally中有return值會覆蓋try中return值。
6.switch…case中:case可以是表達式:switch(true){case a==10;console.log(10);break; …}
?
第二部分。異步和性能
第一章? 異步:現在與將來
第三章:promise
1.try…catch:無法跨異步操作工作(及try里進行異步/回掉處理報錯無法catch,只能硬生生報錯)?
2.promise.all([…])僅在所有成員的promise都完成才返回完成,其中任意一個被拒絕即被拒絕,并丟棄來自其他所有promise的全部結果
注:(1)Promise.all([…])數組為空立即完成;Promise.race([…])數組為空,永不決議,不為空:一旦有任何一個promise完成則為完成,一旦任意一個為拒絕則為拒絕
? ? ? (2)Promise.all([p1,p2]).then(function(msgs){. //msgs是一個數組 ? })。 Promise.race([p1,p2]).then(function(msg){. //msg只返回最先執行完的回執 ? })
3.歸納:
(1)var p=new Promise(function(resolve,reject){ })
(2)Promise.resolve(…)和Promise.reject(…)
(3)then().catch().? ? p.catch(reject)與p.then(null,reject);一樣
(4)Promise.all([…])和Promise.race([…])
?
?
Q1:Function.apply.bind(fn,null);224
Q2:
?
第四章。生成器
?
第五章。程序性能
?第六章。性能測試與調優
1.可用Benchamark.js測試(可在js,node.js環境運行)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/miaSlady/p/9640158.html
總結
以上是生活随笔為你收集整理的《你不知道的JavaScript》中卷 KYLE SIMPSON 著 单业 姜南 译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于java的智能手表_基于安卓Andr
- 下一篇: c复习过程随笔四