- js循环双值
for(var i = 0,j = 0;i<5,j<3;i++,j++){console.log(i,j);}
//打印结果0,0;1,1;2,2;
//中间的i<5,j<3;for循环条件语句如果有多个条件,满足一个即可 是做的||判断
- typeof 妙用,防范机制,不会导致未定义的变量报错 而是返回undefined
console.log(typeof a); //undefined
console.log(b);//ReferenceError: b is not defined
- 字符串方法 借用数组方法 因为实现很类似 字符串不可变 所以不能借用改变自身方法 如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设置机器精度 来判断两个浮点型小数计算后的值
```javascript
function floatNumberIsEqual(num1,num2) {
//获取两个值的绝对值 如果小于机器精度就说明是相等的
return Math.abs(num1 - num2) < Number.EPSILON;
}
console.log(floatNumberIsEqual((0.1+0.2),0.3));
```
- 数组伪乱序
```javascript
var arr = [1,2,3,4,5];
arr.sort(function (pre,cur) {
return Math.random() - 0.5;
});
console.log(arr);
```
-
基础类型是值传递,复合类型(对象)是引用传递,搞清楚深拷贝和浅拷贝。考虑vue父子通信时传递对象给子控件,子控件修改该对象的值时父控件的该值也会发生改变,因为引用的是同一对象!
var obj = {arr:[1,2,3],cc:undefined}; //对json安全的(满足json格式,没有function 和 undefined)对象进行深拷贝 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对象进行浅拷贝(只拷贝值传递的基础类型) 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,...)虽然变量引用的是该对象,但是在操作时会将该值从对象中提取出来进行运算,所以修改基本类型对象引用的值不能达到真正修改引用。
- 强转Number
- Number(xxx),+xxx都可以强转
- 转换Number先调用对象的valueOf方法 如果没返回值则调用toString方法.得到的基础类型返回值再进行number转换
- 强转String
- String(xxx),xxx+""
- 先调用toString如果没有返回值则调用valueOf
看到73页