zoukankan      html  css  js  c++  java
  • JavaScript快速入门笔记(4):表达式

    本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12218024.html

    基本表达式

    JavaScript 支持的操作符列表:

    + - * / % ++ --
    = += -= *= /= %=
    == === != !== > < >= <= ?
    && || !
    & | ~ ^ << >> <<<
    typeof instanceof

    其详细介绍请参考:W3Schools: JavaScript Operators

    == 与 === 的区别

    其中:

    • == 操作符用于比较两个值(可以是表达式)是否相等
    • === 操作符比 == 更加严格,它还会检测两个值的类型是否相同

    示例:

    var n = 123;
    var s = "123";
    alert(n == s);      // true
    alert(n === s);     // false
    alert(n === 123);   // true
    alert(s === "123"); // true
    alert(null == undefined);  // true
    alert(null === undefined); // false

    正则表达式

    JavaScript 采用 Perl 中正则表达式的语法,格式:

    /pattern/modifiers

    示例:

    var s = "https://www.baidu.com/";
    if (/www.S+.com/i.test(s)) { // 判断字符串与正则式是否匹配
        console.log("String " + s + " matches the pattern");
        var pattern = /(https?)://www.([^/]+)/i;
        var groups = pattern.exec(s);      // 获取分组,返回一个数组,第0个元素为完全匹配的内容,其余依次为各个分组的内容
        console.log('URL: ' + groups[0]);      // https://www.baidu.com 注意这里没有右斜线
        console.log('Protocol: ' + groups[1]); // https
        console.log('Domain: '   + groups[2]); // baidu.com
    }

    in 运算符

    in 运算符配合 for 语句可以遍历数组元素和对象键值列表,也可以单独使用用于判断对象中是否包含某个属性,例如:

    // 1. 遍历数组元素,in 的左操作数返回数组下标值
    var list = ["Jack", "Bob", "Linda", "Lily"];
    for (var i in list) {
        var name = list[i];
        console.log(name);
    }
    
    // 2. 遍历对象属性,in 的左操作数返回对象属性名
    var person = { name: "Jack", gender: "male", age: 23 };
    for (var attr in person) {
        var value = person[attr];
        console.log(attr + ": " + value);
    }
    
    // 3. 判断某个属性是否存在于对象中,左操作数为属性名
    if ("name" in person) {  // true
        console.log("name in person");
    }
    if ("class" in person) { // false
        console.log("class in person");
    }
    
    // 4. 判断数组是否包含某个下标值,左操作数为下标值(而不能是数组元素值)
    if (1 in list) {  // true
        console.log("1 in list");
    }
    if (4 in list) { // false
        console.log("4 in list");
    }
    // 注意:上面判断数组是否包含某个下标,要想判断是否包含某个值,可以用 Array 的 includes() 方法,例如:
    if (list.includes("Bob")) { 
        console.log("Bob is in list");
    }

    delete 运算符

    JavaScript 中的 delete 操作与 Perl 中类似,可以用来删除对象的属性,也可以用来删除数组元素(把数组当做一个对象的话,每个下标都是一个属性,delete只删除下标属性,不改变length属性)。例如:

    var person = { name: "Jack", gender: "male", age: 23 };
    delete person.gender;   // "gender" 属性将被删除
    console.log(Object.keys(person).length); // 2
    for (var attr in person) {
        var value = person[attr];
        console.log(attr + ": " + value);
    }
    
    var list = ["Jack", "Bob", "Linda", "Lily"]; // 可以看做是: { 0:"Jack", 1:"Bob", 2:"Linda", 3:"Lily", length:4 }
    delete list[2]; // 删除 "Linda" 元素,相当于删除了数组对象中的属性"2",但并不会修改数组长度属性 length
    console.log(list.length);   // 4
    for (var i in list) {   // 这里 i 分别为 0, 1, 3
        var name = list[i];
        console.log(name);
    }

     另外,delete 的使用也是有一些限制的,比如:

    • delete 只能删除对象的自有属性,不能删除继承而来的属性。
    • delete 不能删除那些可配置性为 false 的属性,例如:Object.prototype、用户声明的全局变量或函数(这些作为“全局对象”的属性存在),例如:
    // 通过声明方式创建的全局变量和函数不能删除
    var v = 123;
    function f() {}
    console.log(delete this.v);  // false
    console.log(delete this.f);  // false
    
    // 通过下面这种方式创建的,则可以删除
    this.v2 = 456;
    this.f2 = function(){};
    console.log(delete this.v2); // true
    console.log(delete this.f2); // true
    View Code

    完。

  • 相关阅读:
    (算法)Hanoi Problem汉诺塔问题
    (剑指Offer)面试题48:不能被继承的类
    (剑指Offer)面试题47:不用加减乘除做加法
    (剑指Offer)面试题46:求1+2+3+....+n
    (剑指Offer)面试题45:圆圈中最后剩下的数字
    程序员应该知道的15件事 在生活与工作中用他们来警惕自己
    基于REST架构的Web Service设计
    互联网上五个最高级的搜索引擎
    哈佛经济学家关于工作效率的意外发现
    列举一些常见的系统系能瓶颈 Common Bottlenecks
  • 原文地址:https://www.cnblogs.com/itwhite/p/12218024.html
Copyright © 2011-2022 走看看