JavaScript奇淫技巧(一)

if-else简化写法

  • 代码中若出现多层if-else嵌套,代码就会显得臃肿不堪,这时可采用替代方案来浓缩代码。
  • 常规写法:(臃肿不堪)
if(){
    if(){
        //……
    }
    else{
        //……
    }
}
else{
    //……
}
  • 简化写法:(一行搞定)
(a) && (b) || (c);

上述表达式含义:若条件a为true则执行表达式b,否则执行表达式c。 原本多行的if-else语句一行就可以搞定。 此外,该句式支持多层嵌套,从而可以实现复杂的条件判断。

  • 缺点:这种方式将原本多行的if-else浓缩成一行,可读性大大降低,因此在实际开发中要慎用。虽然逼格很高,很像是大神写的代码,但过一阵子也许你自己都很难读懂。因此,面对高逼格和可读性时你要慎重选择。

清空数组的快速做法

  • 常规方法:
var array = [1,2,3,4,5];
array = [];

通常我们采用上述办法,但这种方法有严重缺陷!它实际上并没有清空原本的数组对象! 它创建了一个新的、空的数组对象[],然后将它赋给原本的**数组变量**array,因此原本非空的数组对象并没有清空,而是等待垃圾回收机制处理。

此外,这种方式用在函数中会有风险,示例:

var array = [1,2,3,4,5];

//清空函数方法1
function clearArray1(array){
    array = [];
    return array;
}

//清空函数方法2
function clearArray2(array){
    array = [];
}

array = clearArray1(array);//array为[]
clearArray2(array);//array仍为[1,2,3,4,5]

上述示例定义了两种清空数组的方法,他们都采用给数组赋上[]的方式,clearArray1成功清空数组,而clearArray2却不行。

  • 冷门方法: 为了避免上述方法的种种弊端,可以使用以下方式来清空数组:
array.splice(0,array.length);

本方法借助JS提供的splice函数,删除本数组的所有元素。由于splice函数是对数组对象本身进行操作,从而不会出现上述问题。

  • 快速方法: 清空数组最简单明了的方式如下:
array.length;

一句话搞定! 由于数组的length属性是一个可读写的值,JS就是通过它来判断当前数组的长度,因此我们完全可以使用它决定当前数组的长度。


一句话描述“闭包”

闭包:当一个函数作为参数传给另一个函数,或作为外层函数的返回值,只要内层函数没有结束,外层函数就不会被销毁,内层函数可以获取外层函数的任意属性。


i++和++i作为函数参数的区别?

function func(i){
 alert(i);
}

var i=1;
func(i++);//1
func(++i);//3

这个问题很常规。 i++会先执行后续操作,再进行+1操作,因此函数内部得到的是1; ++i会先+1,再执行后续操作,因此函数得到的是+1后的结果。


JQuery对象与JS DOM对象相互转化

  • JQuery——>DOM对象
//现有一个JQuery对象:
$("#id");
//转化成DOM对象
$("#id")[0]

PS:$(“xxx”)返回结果一定是一个数组,即使是根据ID来取。

  • DOM对象——>JQuery对象
//现有一个DOM对象:
var dom = document.getElementById("id");
//转化成JQuery对象
$(dom)

判断数组中是否存在某对象

  • JS原生indexOf
var array = [obj1, obj2];
array.indexOf(obj1);//若存在返回下标,不存在返回-1

这种方法用的最常用,但某些IE不兼容。

  • JQuery inArray
$.inArray(value, array)//若存在返回下标,不存在返回-1
  • 自己写一个
if (!Array.indexOf) {  
    Array.prototype.indexOf = function (obj) {  
        for (var i = 0; i < this.length; i++) {  
            if (this[i] == obj) {  
                return i;  
            }  
        }  
        return -1;  
    }  
}  

初始化二维数组

二维数组本质上是一个元素为一维数组的一维数组,因此你首先需要初始化一个一维数组:

var array = [];

再给这一维数组添加一维数组作为元素:

for(var i=0; i<10; i++){
    array.push([]);
}

JS除法会有小数部分

JS除法和Java不同,两个整数相除会有小数部分,如果只需整数,则需调用相关函数取整。

//向下取整
parseInt(5/2)
Math.floor(5/2)

//向上取整,有小数就整数部分加1
Math.ceil(5/2)

//四舍五入.
Math.round(5/2)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

C语言编程精华——《指针》

C语言编程精华--《指针》 使用指针有两方面的优势: 1、用指针能够更好完成某些任务; 2、有些任务只能是用指针才能够完成。 一、指针定义 1、计算机的内存 计...

1670
来自专栏MasiMaro 的技术博文

地址、指针与引用

计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的...

521
来自专栏老司机的技术博客

宝宝都能学会的python编程教程9:dict和set

dict字典 dict和我们小时候用的字典很像,如果你想查一个汉字,你只需要根据某一个拼音就可以很快速的查询到它。 ? 在字典的索引表里(比如部首表)查这个字...

3255
来自专栏磐创AI技术团队的专栏

2018 年最常见的 Python 面试题 & 答案

https://data-flair.training/blogs/python-tutorial/

391
来自专栏python3

python3--中一些常见的坑(机制上的问题)

重点:在循环一个列表时,最好不要进行删除的动作(一旦删除,索引会随之改变),容易错误。

521
来自专栏阿凯的Excel

Python读书笔记7(列表-改增删)

上期和大家分享了列表的创建及列表的基本特性,本期和大家分享一下列表改增删操作。 一、列表的修改 ? 上期的这个图还记得吗? 这个图说明了字符串的不可变性及列...

3354
来自专栏小樱的经验随笔

【Java学习笔记之二】java标识符命名规范

什么是标识符 就是程序员在定义java程序时,自定义的一些名字。标识符可以应用在类名、变量、函数名、包名上。 标识符必须遵循以下规则 标识符由26个英文字符大小...

3107
来自专栏程序员宝库

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

该项目来自于 Github 用户 Chalarangelo,目前已在 Github 上获得了 5000 多Star,精心收集了多达 48 个有用的 JavaSc...

34112
来自专栏WD学习记录

Python数据结构与算法笔记(2)

栈、队列、deques、列表是一类数据的容器,它们数据项之间的顺序由添加或删除的顺序决定。一旦一个数据项被添加,它相对于前后元素一直保持该位置不变。诸如此类的数...

531
来自专栏企鹅号快讯

Python读书笔记7

上期和大家分享了列表的创建及列表的基本特性,本期和大家分享一下列表改增删操作。 一、列表的修改 ? 上期的这个图还记得吗? 这个图说明了字符串的不可变性及列表的...

1799

扫描关注云+社区