一.用&&,||赋值
var foo = 10;
foo == 10 && doSomething(); // 等价于 if (foo == 10) doSomething();
foo == 5 || doSomething(); // 等价于 if (foo != 5) doSomething();
在A&&B中,当A为true,则返回B;A为false时,直接返回A
this.str = "CH";
var str = this.str && this.str.toLowerCase(); //输出 "ch"
this.str = null;
var str = this.str && this.str.toLowerCase(); //输出 null
//相当于
if(this.str){
str = this.str.toLowerCase();
}else{
str = this.str;
}
在A||B中,当A为false,则返回B;A为ture时,直接返回A,这个运算经常用来判断一个变量是否已定义,如果没有定义就给他一个初始值,这在给函数的参数定义一个默认值的时候比较有用。
function doSomething(arg1){
Arg1 = arg1 || 10; // 如果arg1没有被设置的话,Arg1将被默认设成10
}
当我们创建了一个新的变量,我们通常会去验证该变量的值是否为空(null)或则未定义(undefined),直接的写法是这样
if (variable1 !== null || variable1 !== undefined || variable1 !== '') { let variable2 = variable1; }
其实我们可以用 ||来更简便的书写:
var val2 = val1 || '';
二、数字字符串前加“+”号转number类型
var one = '1';
var numberOne = +one; // Number 1
三、清空数组两种方法比较
(1)arr=[] 将一个变量指定个引用到那个数组,而其他引用都不受影响。这意味着,对于先前数组的内容的引用仍然保留在内存中,从而导致内存泄漏。
(2) arr.length = 0 删除数组内的所有东西,这不需要引用任何其他的东西
然而,如果你有一个copy的数组(A和copy-A),如果你使用list.length = 0 删除其内容,副本也会失去它的内容。
四、数字字符串连接
var one = 1;
var two = 2;
var three = '3';
var result1 = one + two + three; //"33" 而不是 "123"
var result2 = ''.concat(one, two, three); //"123"
五、给回调函数传递参数
在默认情况下,你无法将参数传给回调函数,如下:
function callback() {
console.log('Hi human');
}
document.getElementById('someelem').addEventListener('click', callback);
你可以采取JavaScript闭包的优点来给回调函数传参,案例如下:
function callback(a, b) {
return function() {
console.log('sum = ', (a+b));
}
}
var x = 1, y = 2;
document.getElementById('someelem').addEventListener('click', callback(x, y));
另一种方法是使用绑定方法。例如:
var alertText = function(text) {
alert(text);
};
document.getElementById('someelem').addEventListener('click', alertText.bind(this, 'hello'));
六、获取一个数字数组中的最大值或最小值
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
var maxInNumbers = Math.max.apply(Math, numbers);
var minInNumbers = Math.min.apply(Math, numbers);
七、使用 length 来截短一个数组
var myArray = [12 , 222 , 1000 , 124 , 98 , 10 ];
myArray.length = 4; // myArray will be equal to [12 , 222 , 1000 , 124].
八、 四舍五入一个数字,保留N位小数
var num =2.443242342;
num = num.toFixed(4); // num will be equal to 2.4432
九、浮点数问题
0.1 + 0.2 === 0.3 // is false
9007199254740992 + 1 // is equal to 9007199254740992
9007199254740992 + 2 // is equal to 9007199254740994
0.1+0.2等于0.30000000000000004。可以使用 toFixed() 和 toPrecision() 方法解决这个问题
十、if true .. else 用双目运算代替
var big = x > 10 ? true : false;
var x = 3,
big = (x > 10) ? "greater 10" : (x < 5) ? "less 5" : "between 5 and 10";
console.log(big); //"less 5"
通过双目运算可以使函数调用简短:
function x() {console.log('x')};
function y() {console.log('y')};
var z = 3;
(z==3?x:y)();
十一、 charAt()的替代品
"myString".charAt(0);
可以这么写
"myString"[0]; // 返回 'm'
十二、 对象简单复制(不同用一个地址)
var arr1 = {
id:12,
name:'sdk'
}
var arr2 = JSON.parse(JSON.stringify(arr1));