zoukankan      html  css  js  c++  java
  • JavaScript的基础语法,你真的了解吗?

        这篇文章是在我们熟悉了JS的基础语法后,很少有人去关注的一些细节部分。如果掌握了某些细节也许会对代码的改善有着非凡的作用。也许会使我们的代码更严谨,更高效。

        1.if语句的条件

        if条件中,括号里是布尔类型的表达式,但你真的了解什么时候是真值,什么时候是假值吗?

        下列值被当做假(false):

        false;null;undefined;空字符串'';数字0;数字NaN

        其它的值都被当做真,包括true、字符串"false",以及所有的对象

        2.逻辑运算符

        我们都知道,关于逻辑运算符&&是并、||是或。很多人还可以指出JAVA中,&和|是不短路的。但你真的了解JS中的&&和||的运算规则吗?

        &&:如果第一个表达式的值为假,那么运算符&&产生它的第一个表达式的值,否则产生第二个表达式的值。

        ||:如果第一个表达式的值为真,那么运算符||产生第一个表达式的值,否则产生第二个表达式的值。

        那么,大家可以猜到下面的代码的输出了吧。

    var str = "abc";
    alert(true && str); // abc

        这可以引申为:当我们尝试从undefined中获得属性时将导致TypeError异常,页面会提示“属性不存在”。但我们使用如下代码就可以避免。

    var obj = {
        name:"someone",
        propoty:{
            higth:100,
            200
        }
    }
    alert(obj.propoty.higth); // 100
    alert(obj.other); // undefined
    alert(obj.other.higth); // TypeError
    alert(obj.other && obj.other.higth); // undefined

        要知道,出现TypeError浏览器是要报错的,而返回undefined是一个值,不会影响程序流程,这对客户来说是非常重要的。

        3.typeof运算符

        typeof运算符产生的值有'number'、'string'、'boolean'、'undefined'、'function'和'object'。但这里有一个陷阱:如果是一个数组或null,那么结果是'object'。如 

    alert(typeof null); // object

        4.==与===

        在我遇到的几乎所有的JS代码中,使用的都是==(恕我见识短浅)。很遗憾,这是有缺陷的。

        ===和!==会按照你期望的方式工作,如果两边表达式的结果类型一致且拥有相同的值,那么===返回true,!==返回false。但对于==和!=只有在类型一致的时候才会做出正确的判断。如果两边的表达式的结果类型不一直,它们会去做强制类型转换。转换的规则非常复杂,具体可以去搜索相关详述。如下一些例子:

    alert('' == '0');           // false
    alert(0 == '');             // true
    alert(0 == '0');            // true
    alert(false == 'false');    // false
    alert(false == '0');        // true
    alert(false == undefined);  // false
    alert(false == null);       // false
    alert(null == undefined);   // true
    alert(' \t\r\n ' == 0);     // true

        以上如果使用===,结果都是false。

        注:以上部分例子参考《JavaScript语言精粹》一书。

  • 相关阅读:
    javascript中构造函数与普通函数的区别还有关于“new”操作符的一些原理
    一个简单的jquery左右列表内容切换应用
    Spring学习笔记(三)之装配Bean
    Maven引入jar的总结
    在使用hibernate的getHibernateTemplate()时怎么让控制台输出封装好的SQL? 怎么用日志打印出来?
    Spring学习笔记(二)之装配Bean
    spring学习笔记(一) Spring概述
    ResourceBundle读取文件学习
    如何从结果集中遍历得到一条条的数据?
    response与request回顾学习
  • 原文地址:https://www.cnblogs.com/hanmou/p/3303906.html
Copyright © 2011-2022 走看看