zoukankan      html  css  js  c++  java
  • js中的或(||)运算符和与(&&)运算符

    今天复习js继承的时候发现了一个问题,先上代码了

    <script type="text/javascript">
            window.onload = function () {
                var mama,
                    mama1,
                    test = function (name) {
                    debugger;
                    this.name = name || 'mama';
                    };
                debugger;
                mama = new test();
                mama1 = new test("mama1");
                alert(mama.name);//name = mama
                alert(mama1.name);// name = mama1
            }
    
        </script>

    在执行构造函数的时候,无参的构造函数返回的name是'mama',有参数时,实例的name就是参数值了。

    这个时候我就有点犯迷糊了,为什么逻辑运算符||能这么用呢?

    由于是C#出身,所以对js ||这样用感觉很奇怪。

    没辙,不懂先研究,实验实验就知道了。

    var b, c, d;
                b = true || 0;//b=true;
                c = false || 0;//c=0;
                d = 1 || 0;//d=1;

    换成别的呢?

    var b, c, d;
                b = 1-1 || 1+1; //b=2
                c = function () { return undefined } || function () { return 1};//c=function();
                d = c();//d=undefined
    var b, c, d;
                b = 1-1 || 1+1; //b=2
                c = function () { return 1 } || function () { return undefined};//c=function();
                d = c();//d=1
    b = {} || { a: 1, getA: function () { return this.a}}; //b=object

    var b, c, d;
                b = { a: 1, getA: function () { return this.a } } || {}; //b=object
                c = b.getA();//c=1;

    通过这几个实验,可以看出,JS的||并不是像C#里面的||一样 单纯的返回一个布尔类型。

    大家都知道js的布尔类型判定是

    对象是true,非零是true,非空字符串是true

    其余的都是false

     由此得出

    逻辑或 ||  : var a = 表达式1 || 表达式2

          表达式1    表达式2    a取值

            1          0      表达式1结果值

            1        1      表达式1结果值

            0        1      表达式2结果值

            0        0      表达式2结果值

    逻辑与 &&  : var a = 表达式1 && 表达式2

          表达式1    表达式2    a取值

            1          0      表达式2结果值

            1        1      表达式2结果值

            0        1      表达式1结果值

            0        0      表达式1结果值

     主要原因是因为短路,逻辑或 || 在前面有一个ture的时候则不看后面直接停止,逻辑与&&同理。

    然后计算赋值和我们平时一样之获取最新的一次计算结果值。

    例如

    b = (1 + 1, 2 + 2, 3 + 3);//b=6;

    嘛嘛,当然只是猜测。

    以上仅供参考。萌新一只,望各位大佬轻批。

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/naocanzhishen/p/6550504.html
Copyright © 2011-2022 走看看