编码时使用的一些小技巧

! 取反

有时候我们需要判断一个变量是否存在, 比如判断是否为以下情况 Null / “” / undefined / 0 / false 我们可以使用 ! 来进行运算

var value = Null / "" / undefined / 0 / false 任何一种情况
//我们需要判断 value 的值 一开始你或许会这样写
if(value == Null || value == "" || value == 0 || value == undefined || value == false){
    //TODO
    // ...
}
//有了 ! , 就不需要再这样编写代码了
if(!value){
    //TODO
    // ...
}


+ 正值运算符

二义性 里有提到过

var number = "10";
number = +number; // number = 10;


|| 或者条件

    // 定义一个日志输出方法
    function log(value){
        //如果传入的日志内容为空
        if(!value){
            //赋一个默认值
            value = "空日志";
        }
        //继续执行日志输出逻辑
        console.log(value);
    }
在编码中我们会遇到很多这样的场景, 当传入的参数为空的时候,
为了使程序继续往下执行, 我们会做很多默认值的处理。
为了简化代码, 我们可以这样做。
value  = value || "空日志"
与上面的 if 完全一样, 当 value 为空的时候执行右边的运算。


&& 并且条件

从上面的例子可以看到, 如果使用者常常不传日志信息进去,
那么日志输出控制台会打印很多的默认日志
// 现在来修改一下代码
function log(value){
    //传入的日志内容不为空时才输出日志信息
    if(!value){
        //继续执行日志输出逻辑
        console.log(value);
    }
}
/*
    这样修改后, 只有 value 有值时才会输出日志信息。
    还是一样的, 我们来简化 if 条件运算
    value && console.log(value);
    与上面的 if 完全一样, 当 value 不为空的时候执行右边的运算。
*/


三元运算

//现在有一个需求, 要求变量 number 必须大于等于 0, 如果小于 0 默认为 0
var number = 0;
//大家通常会这样写
if(number < 0){
    number = 0;
}
//这里推荐使用三元运算
number = number < 0 ? 0 : number;
//我推荐这样写
number < 0 ? ( number = 0 ) : true;
第一个三元运算, 不管结果如何, 都会对 number 重新赋值,
但是第二个不一样了, 只有在运算结果为 true 的情况下会对 number 做赋值运算
另一种情况直接做一个结束运算, 写 true 是为了语法规范必须写一个运算条件
在哪里。


Array slice

Array slice 方法可从已有的数组中返回选定的元素。

语法 : [].slice(start,end);

参数 说明
start 可选值, 默认为数组的第一个元素
end 可选值, 默认为数组的最后一个元素

现在我们利用这个特性来改变一些像数组的数据, 但是本身没有数组的 API

利用 call 替换对象为 arguments, 然后利用 slice 重新返回数组元素
这样就能把 arguments 改变为一个数组对象了
//arguments 一个最像数组的对象

var arr = [].slice.call(arguments);


Array splice

Array splice 方法向/从数组中添加/删除项目,然后返回被删除的项目。 语法: [].splice(index,howmany,item1,…..,itemX)

参数 说明
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX 可选。向数组添加的新项目。


添加

var arr = [1,2,3,4,5];
arr.splice(1,0,"a","b","c");
console.log(arr); // [1,"a","b","c",2,3,4,5];
/*
    可以看到,在下标为 1 那里开始添加了几个新元素进去,
    原数组从下标为 1 开始以后的数据往后做瞬移。
*/


删除

var arr = [1,2,3,4,5];
arr.splice(1,1);
console.log(arr); // [1,3,4,5];
/*
    可以看到,在下标为 1 那里开始删除元素,
    原数组从下标为 1 + 删除的元素个数 开始以后的数据往前做瞬移。
*/