本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处: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
完。