编写js技巧

一.用&&,||赋值

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));
























  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值