ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[toc] # 每日英语 1. `expression` 表达式 1. `condition` 条件 1. `modified` 改变 # 关系操作符 小于(<)、大于(>)、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比较,这几个操作符都返回一个布尔值 ```javascript var result1 = 5 > 3; //true var result2 = 5 < 3; //false console.log(result1); console.log(result2); ``` ```javascript console.log(3 < 2); //false console.log(3 > 2); // true console.log(3 >= 2); // true console.log(3 <= 2); // false console.log(2 <= 2); // true ``` 当关系操作符的操作数使用了非数值时,也要进行数据转换 1. 如果两个操作数都是数值,则执行数值比较。 1. 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。 ```javascript console.log("hello" >= "world"); // false console.log("hello" > "world"); // false ``` 1. 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。 ```javascript console.log(123 > "123"); //false console.log(123 >= "123"); //true console.log(123 >= "123hello"); // false console.log(123 >= []); // true ``` 1. 如果一个操作数是对象,则调用这个对象的 valueOf() 方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf() 方法,则调用 toString() 方法,并用得到的结果根据前面的规则执行比较。 1. 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。 ```javascript console.log(1 > false); // true console.log(1 > true); // false ``` 由于大写字母的字符编码全部小于小写字母的字符编码 ```javascript var result = "Brick" < "alphabet"; //true console.log(result); ``` ```javascript var result = "Brick".toLowerCase() < "alphabet".toLowerCase(); //false console.log(result); ``` ```javascript var result = "23" < "3"; console.log(result); ``` ```javascript var result = "23" < 3; console.log(result); ``` ```javascript var result = "a" < 3; console.log(result); ``` 由于字母 "a" 不能转换成合理的数值,因此就被转换成了 NaN 。 根据规则,任何操作数与 NaN 进行关系比较,结果都是 false 。 ```javascript var result1 = NaN < 3; //false var result2 = NaN >= 3; //false console.log(result1); console.log(result2); ``` ```javascript var result = "Brick" < "alphabet"; // true var result = "Brick".toLowerCase() < "alphabet".toLowerCase(); // false var result = "23" < 3; // false var result = "a" < 3; // false var result = "a" > 3; // false console.log(result); ``` # 相等操作符 确定两个变量是否相等是编程中的一个非常重要的操作。在比较字符串、数值和布尔值的相等性时, 问题还比较简单。但在涉及到对象的比较时,问题就变得复杂了。最早的 ECMAScript 中的相等和不等 操作符会在执行比较之前,先将对象转换成相似的类型。后来,有人提出了这种转换到底是否合理的质疑。最后,ECMAScript 的解决方案就是提供两组操作符: **相等和不相等——先转换再比较,全等和不全等——仅比较而不转换。** 1. 相等和不相等 ECMAScript 中的相等操作符由两个等于号( == )表示,如果两个操作数相等,则返回 true 。 而不相等操作符由叹号后跟等于号( != )表示,如果两个操作数不相等,则返回 true 。 这两个操作符都会先转换操作数,然后再比较它们的相等性。 在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值—— false 转换为 0,而 true 转换为 1; ```javascript console.log(false == 1); // false console.log(false == 0); // true console.log(true == 0); // false console.log(true == 1); // true ``` 1. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值; ```javascript console.log("123" == 123); // true console.log("123hello" == 123); // false console.log("[]" == 0); // false console.log([] == 0); // true ``` 1. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;这两个操作符在进行比较时则要遵循下列规则。 1. null 和 undefined 是相等的。 1. 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。 1. 如果有一个操作数是 NaN ,则相等操作符返回 false ,而不相等操作符返回 true 。重要提示: 即使两个操作数都是 NaN ,相等操作符也返回 false ;因为按照规则, NaN 不等于 NaN 。 ```javascript console.log(null == undefined); // true console.log(NaN == 0); // false console.log(NaN == "hello"); // false console.log(NaN == NaN); // false ``` 1. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象, 则相等操作符返回 true ;否则,返回 false 。 ```javascript console.log([] == []); // false console.log(new Array() == new Array()); // false var a = []; var b = a; console.log(a == b); // true ``` ```javascript console.log(null == undefined); // true console.log(true == 1); // true console.log("NaN" == NaN); // false console.log(true == 2); // false console.log(5 == NaN); // false console.log(undefined == 0); // false console.log(NaN == NaN); // false console.log(null == 0); // false console.log(NaN != 3); // true console.log(NaN == 3); // false console.log("5" == 5); // true console.log(false == 0); // true console.log(NaN > NaN); // false console.log(NaN < NaN); // false ``` ## 全等和不全等 除了在比较之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别。全等操作符由 3 个等于号( === )表示,它只在两个操作数未经转换就相等的情况下返回 true ```javascript var result1 = "55" == 55; //true,因为转换后相等 var result2 = "55" === 55; //false,因为不同的数据类型不相等 console.log(result1); console.log(result2); ``` 不全等操作符由一个叹号后跟两个等于号( !== )表示,它在两个操作数未经转换就不相等的情况下返回 true ```Javascript var result1 = ("55" != 55); //false,因为转换后相等 var result2 = ("55" !== 55); //true,因为不同的数据类型不相等 console.log(result1); console.log(result2); ``` ```javascript console.log("123" === 123); // false console.log("" === []); // false console.log(0 === []); // false console.log(null === undefined); // false ``` null == undefined 会返回 true ,因为它们是类似的值; 但 null === undefined 会返回 false ,因为它们是不同类型的值。 由于相等和不相等操作符存在类型转换问题,而为了保持代码中数据类型的完整性,推荐使用全等和不全等操作符 # 条件操作符(三元运算) ## 表达式和语句 ```javascript var age = 17; // 语句 123 > 13; // 表达式 ``` 有结果的语句, 就叫表达式 `variable = boolean_expression ? true_value : false_value;` 本质上,这行代码的含义就是基于对 boolean_expression 求值的结果,决定给变量 variable 赋什么值。 如果求值结果为 true ,则给变量 variable 赋 true_value 值;如果求值结果为 false , 则给变量 variable 赋 false_value 值。 `var max = (num1 > num2) ? num1 : num2;` ```javascript var a = 123 > 333 ? "yes" : "no"; console.log(a); // no ``` ```javascript var a = 3; var b = 1; var c = 4; var max = (a > b ? a : b) > c ? (a > b ? a : b) : c; console.log(max); ``` 比 if 语句更简单 ```javascript var a = 3; var b = 4; var c; if (a > b) { c = a; } else { c = b; } console.log(c); // 4 ``` ```javascript var a = 3; var b = 4; var c = 1; var max; if (a > b) { max = a; } else { max = b; } if (max < c) { max = c; } console.log(max); // 4 ``` # 赋值操作符 > 简单的赋值操作符由等于号( = )表示,其作用就是把右侧的值赋给左侧的变量 ```Javascript var num = 10; console.log(num) ``` 如果在等于号( = )前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。 这种复合赋值操作相当于是对下面常规表达式的简写形式: ```javascript var num+=10 var num = 10; num = num + 10; ``` ```javascript var a = "hello"; console.log((a += "world")); // helloworld // var a = "hello"; // a = a + "world"; ``` 每个主要算术操作符(以及个别的其他操作符)都有对应的复合赋值操作符。这些操作符如下所示: `乘/赋值( *= );` `除/赋值( /= );` `模/赋值( %= );` `加/赋值( += );` `减/赋值( -= );` <!-- `左移/赋值( <<= );` --> <!-- `无符号右移/赋值( >>>= )。` --> ```javascript var a = 123; console.log((a *= 10)); // 1230 var b = 10; console.log((b /= 10)); // 1 // b/=10 ====> b = b/10 var c = 13; console.log((c -= 1)); // 12 var d = 24; console.log((d %= 5)); // 4 ``` **设计这些操作符的主要目的就是简化赋值操作。使用它们不会带来任何性能的提升。**(测试时间) ```javascript // var a = "hello"; // var b = a+="world"; // console.log(b); var a = "hello"; var b = a + "world"; console.log(b); ``` # 逗号操作符 > 使用逗号操作符可以在一条语句中执行多个操作 ```Javascript var num1=1, num2=2, num3=3; ``` 逗号操作符还可以用于赋值。 在用于赋值时,逗号操作符总会返回表达式中的最后一项 ```javascript var num = (5, 1, 4, 8, 0); // num 的值为 0 ``` ```javascript var num = (1, 2, 3, 4, 5); console.log(num); // 5 var num = 1; num = 2; num = 3; num = 4; num = 5; console.log(num); // 5 ```