- js循環(huán)雙值
for(var i = 0,j = 0;i<5,j<3;i++,j++){console.log(i,j);}
//打印結(jié)果0,0;1,1;2,2;
//中間的i<5,j<3;for循環(huán)條件語句如果有多個條件,滿足一個即可 是做的||判斷
- typeof 妙用,防范機(jī)制,不會導(dǎo)致未定義的變量報錯 而是返回undefined
console.log(typeof a); //undefined
console.log(b);//ReferenceError: b is not defined
- 字符串方法 借用數(shù)組方法 因?yàn)閷?shí)現(xiàn)很類似 字符串不可變 所以不能借用改變自身方法 如reverse,push,....
```javascript
var a = "123124";
a = [].map.call(a,function (item,index,arr) {
return +item*2;
}).join("");
console.log(a);//246248
```
- Number方法 Number.EPSILON設(shè)置機(jī)器精度 來判斷兩個浮點(diǎn)型小數(shù)計算后的值
```javascript
function floatNumberIsEqual(num1,num2) {
//獲取兩個值的絕對值 如果小于機(jī)器精度就說明是相等的
return Math.abs(num1 - num2) < Number.EPSILON;
}
console.log(floatNumberIsEqual((0.1+0.2),0.3));
```
- 數(shù)組偽亂序
```javascript
var arr = [1,2,3,4,5];
arr.sort(function (pre,cur) {
return Math.random() - 0.5;
});
console.log(arr);
```
-
基礎(chǔ)類型是值傳遞,復(fù)合類型(對象)是引用傳遞,搞清楚深拷貝和淺拷貝??紤]vue父子通信時傳遞對象給子控件,子控件修改該對象的值時父控件的該值也會發(fā)生改變,因?yàn)橐玫氖峭粚ο螅?/p>
var obj = {arr:[1,2,3],cc:undefined}; //對json安全的(滿足json格式,沒有function 和 undefined)對象進(jìn)行深拷貝 var jsonStr = JSON.stringify(obj); var otherObj = JSON.parse(jsonStr); console.log(obj); //{ arr: [ 1, 2, 3 ], cc: undefined } console.log(otherObj); //{ arr: [ 1, 2, 3 ] } console.log(obj === otherObj); //false console.log(obj.arr === otherObj.arr); //false //對js對象進(jìn)行淺拷貝(只拷貝值傳遞的基礎(chǔ)類型) var assignObj = Object.assign({},obj); console.log(assignObj);//{ arr: [ 1, 2, 3 ], cc: undefined } console.log(assignObj === obj); // false console.log(assignObj.arr === obj.arr); //true
- 基本類型的對象類型(如Number,String,...)雖然變量引用的是該對象,但是在操作時會將該值從對象中提取出來進(jìn)行運(yùn)算,所以修改基本類型對象引用的值不能達(dá)到真正修改引用。
- 強(qiáng)轉(zhuǎn)Number
- Number(xxx),+xxx都可以強(qiáng)轉(zhuǎn)
- 轉(zhuǎn)換Number先調(diào)用對象的valueOf方法 如果沒返回值則調(diào)用toString方法.得到的基礎(chǔ)類型返回值再進(jìn)行number轉(zhuǎn)換
- 強(qiáng)轉(zhuǎn)String
- String(xxx),xxx+""
- 先調(diào)用toString如果沒有返回值則調(diào)用valueOf
看到73頁