1. js 数字操作:

    1.1 取整:

    取整有很多方法如:

    parseInt(a,10);
    Math.floor(a);
    a>>0;
    ~~a;
    a|0;

    前面2种是经常用到的,后面3种算是比较偏的,因为其有不足之处,比如将下面代码放到 console 里测试:

    var num = 2150000000;
    console.log(num|0);
    console.log(parseFloat(num))

    你会发现问题;

    输出的是:

    -2144967296
    2150000000

    其原因就在于js数字存储的方式,js的数值存储可以说是32位64位是透明的的,他的前31位是用来存数字,32位是存符号(表示正负),

    所以一次位操作,他最大的数字是 2^31 ,比它大的数字才会出现问题,所以才这个数字以下的操作大家都不用担心的;

    1.2 数字的加减:

    这个应该很多人都知道,如0.1+0.2,使用 console 计算的结果并不是你们想象的0.3,而是0.30000000000000004;

    原因嘛,是因为js 是基于 IEEE754 数值的计算,所有使用的都会有这毛病,比如早期的 Java;

    而我们进行加减运行时,可以对其小数点进行控制,来省略不必要的小数;

  2. 逻辑运算符:

    2.1 在我之前学习的时候,只说明了这样的情况

    //||或:
    var bar = foo||apple;
    //约等于
    if(foo){
    bar = foo;
    }else{
    bar = apple;
    } //&&且:
    var bar = foo&&apple;
    if(foo){
    bar = apple;
    }else{
    bar = foo;
    }

    我想大家看到这个也许知道了是怎么回事,但是却不知道应用的场景吧;

    ||(或),一般用来创建值得默认值,比如var foo = bar || 1;,这样可以联系上面,当 bar 没有值的时候 foo = 1;

    而&&(且)我觉得作用比或要大,因为他有短路的功能,举个例子:

    var data = {
    msg:{
    foo:1
    }
    }
    var bar = data.msg && data.msg.foo;

    这里使用且可以用来判断 foo 的前置 msg 是否存在,如果不存在就直接返回 undefined,

    并且不会报错,而单独使用 data.msg.foo 时,若 msg 不存在,则会出现 Cannot read property 'foo' of undefined 的报错,

    这个在日常工作共较为重要;

    而另外一个例子:

    var isRun = true;
    function foo(callback){
    callback && callback();
    //或者:
    isRun && callback();
    }

    在函数中判断是否有回调函数或者设置值是否为TRUE,若TRUE则执行;

    2.2 一种偏门用法:

    如果对于某个input需要验证的话,那么可以使用","来进行分割判断

    var input = '',err = ''
    if(input || (err='请输入内容'),input.length>10 && (err = '长度过长'),err){
    console.log(err)
    }

    简单的说下,关于逗号运算符:

    在有逗号的情况下,只需要看逗号后面的代码返回是什么就行了,前面的代码只是执行,并不会去影响if的判断

    上述代码等于:

    var input = '',err = '';
    if(!input){
    err = '请输入内容'
    }
    if(input.length>10){
    err = '长度过长'
    }
    if(err){
    console.log(err)
    }
  3. 替换 else if:

    这个问题也是老生常谈了,我就简单的说下;

    3.1 使用 switch 替换:

    相信不用我多说了,不过有一点,在 case 里要使用 break 或 return,不然会出现一个问题:

    var a = 1;
    
    switch(true){
    case a<2:
    console.log(1);
    case a<3:
    console.log(2);
    }

    运行后可以看到,输出了1,2 那么是 a<2 且 a<3 了吗? 其实并不是:

    var a = 1;
    
    switch(true){
    case a<2:
    console.log(1);
    case a<1:
    console.log(2);
    }

    将 a<3 替换为 a<1,运行后,仍然是输出1,2 这可以说明 a<1 并没有被判断;

    这个地方需要被注意,很多错误都会因此而引发;

    3.2 使用对象替换:

    function check(foo){
    return {
    1:'warnging',
    2:'success',
    3:'error'
    }[foo]
    }

    可以用对象的方法来替换if,并且也可以通过或(且)加入默认值:

    function type(foo){
    return {
    1:'warning',
    2:'success',
    3:'error'
    }[foo]|| 'default'
    }

    对比一下,比 if else 方便,简洁了很多;

    如果 foo 是一个从0开始的数字那么使用数组也是一个好的选择:

    function type(foo){
    return ['warning','success','error'][foo]|| 'default'
    }

    也许有人会说逻辑运算符也能代替,但是不要忘记了代码的可读性,像var a = bar && foo || (baz && qux) 这样的代码,可读性太差了;

    要记得代码的可读性,可维护性是和他的性能同样重要的;

js 中的一些小技巧的更多相关文章

  1. js中的换算小技巧

    之前自己一直使用~~运算符来把‘112222’字符型的数值换算成整型的数值 但今天调试程序发现了一些问题 ~~'999'=>999 ~~'111111999'=>111111999 这些都 ...

  2. JS、JQ相关小技巧积攒

    JS.JQ相关小技巧积攒,以备不时之需. 1.js 获取时间差:时间戳相减.new Date().getTime()  获得毫秒数,除以(1000*60*60*24) 获得天数. 2.重定向操作:页面 ...

  3. ACM 做题过程中的一些小技巧。

    ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...

  4. C语言中的调试小技巧

    C语言中的调试小技巧 经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的 ...

  5. jquery获取json对象中的key小技巧

    jquery获取json对象中的key小技巧 比如有一个json var json = {"name" : "Tom", "age" : 1 ...

  6. ES6中常用的小技巧,用了事半功倍哦

    ES6中常用的小技巧,如果能在实际项目中能使用到,必定事半功倍: 1. 强制要求参数 ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数. 在下面的例子中,我们写了 ...

  7. C#中使用swagger小技巧

    C#中使用swagger小技巧 swaggerUI显示的接口内容主要用于开发阶段便于与前端联调,不适合发布到对外的站点. 有以下两种方式,让接口不显示在SwaggerUI中 1.使用属性 [ApiEx ...

  8. RS开发中的一些小技巧[不定期更新]

    从9月份一直忙到了现在,项目整体的改版工作也完成了十有八九了,有些事情只有你自己真正的做了,你才能明白:哦,原来还可以这个样子,这样做真的好了很多呢,接下来我就分享一些最近遇到的RS开发的一些小技巧, ...

  9. JS前端下载文本文件小技巧:1、download属性;2、借助Blob转换成二进制下载

    一.HTML download 与文件下载 如果希望在前端侧直接触发某些资源的下载,最方便快捷的方法就是使用HTML5原生的download属性,例如: <a href="large. ...

随机推荐

  1. visual studio添加lib库

    方法1: 通过设置工程配置来添加lib库. A.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. B.添加文件引用的lib静态库路径 ...

  2. Oracle_子查询

    Oracle_子查询 子查询   --如何查得所有比"CLARK"工资高的员工的信息 select ename, sal from emp where ename = 'CLARK ...

  3. 织梦dede在首页调用留言本

    织梦dedecms在首页调用留言本 . {dede:loop table=dede_guestbook sort=dtime row=10 titlelen=36 typeid=40 if=ische ...

  4. 【开发技术】storyboard和nib的差别

    在使用Storyboard管理的iOS应用中,它的组成部分为AppDelegate和ViewController这两个类以及MainStoryboard.storyboard文件组成.Storyboa ...

  5. 数据结构 链式哈希表(Hash Table)的接口定义与实现分析(完整代码)

    链式哈希表的接口定义 关于哈希表与链式哈希表的描述可以参阅:http://www.cnblogs.com/idreamo/p/7990860.html 链式哈希表的操作与属性有:初始化.销毁.插入元素 ...

  6. java基础复习1

    jre:Java运行环境 jdk:Java开发工具(包含jre) java两大机制:JVM (java虚拟机) 垃圾回收 变量的分类: 1.按数据类型分: 1)基本数据类型:8种 整型:byte sh ...

  7. idea 远程调试 tomcat web应用

    最近在做的一个东西,测试环境和本地环境差距太大,本地能运行的代码,放到测试环境上到处报错,哪里哪里都连不上,所以决定把代码部署到远程服务器上调试,节省时间. 网上看了很多教程,大部分都是互相抄来抄去, ...

  8. vue中什么样的数据可以是在视图中显示

    1. Vue中不可以添加不存在的属性,因为不存在的属性是没有getter和setter的. <div id="app"> {{msg.a}} {{msg.b}} < ...

  9. error: stray '\357' in program编程出错的总结

    错误: 编译报错:error: stray '\357' in program 原因:在程序中打入了全角字符   具体分析产生原因: 在编程中,由于打字的快速,按下ctrl键后紧接着按下了space键 ...

  10. Python使用requests模块访问HTTPS网站报错`certificate verify failed`

    使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...