你真的理解了比较运算符吗

平常我们都是不建议在代码上编写一些比较难理解的代码,例如 x == y 和 'A' > 'B' 。这篇文章或许不能给你带来什么大的帮助,但是却可以让你了解一些你可能没接触到的知识点。 由于有些参考资料来源于 ECMA 规范,所以感兴趣的可能需要先看《读懂 ECMAScript 规格》这篇文章,当然也可以忽略。 类型之间的转换表首先我们需要先了解基本的类型转换规则。 粗体需要特别留意的,可能跟你想象中的不一样。 原始值转换为数字转换为字符串转换为布尔值false0"false"falsetrue1"true"true00"0"false11"1"true"0"0"0"true"000"0"000"true"1"1"1"trueNaNNaN"NaN"falseInfinityInfinity"Infinity"true-Infinity-Infinity"-Infinity"true""0""false"20"20"20"true"Runoob"NaN"Runoob"true[ ]0""true[20]20"20"true[10,20]NaN"10,20"true["Runoob"]NaN"Runoob"true["Runoob","Google"]NaN"Runoob,Google"truefunction(){}NaN"function(){}"true{ }NaN"[object Object]"truenull0"null"falseundefinedNaN"undefined"false这里根据上面的表格列举些例子: 数字转字符串 这个最常用了,这个也很好理解。 String(123)或者 const a = 123;a.toString();将字符串转换为数字 Number("3.14") // 返回 3.14Number(" ") // 返回 0Number("") // 返回 0Number("99 88") // 返回 NaN字符串转布尔值 Boolean('test') // 返回 trueBoolean('0') // 返回 falseBoolean('000') // 返回 true== 比较运算符规则来源于 ECMA 相关规范 Abstract Equality Comparison。 == 等同运算符的两边的类型不一样的时候,会有类型自动转换规则。 相同的类型可以直接比较(相当于 === 比较),无需自动转换,不同类型有下面几种自动转换规则(x == y),规则优先级自上而下: 如果 x 是 null,y 是 undefined,返回 true ...

November 2, 2019 · 3 min · jiezi

JS逻辑运算符-比如let-a-b-c

1、JS中的||符号: 运算方法: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。 只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。 比如:var a= b || c, 这相当于一个赋值语句,如果b的值被转换为false,那么就把c的值赋给a,否在就把b的值赋给a;javascript中以下值会被转换为falsefalseundefinednull0-0NaN""''

May 29, 2019 · 1 min · jiezi

JavaSe笔记03-关于操作符,运算符和位运算符

运算符Java运算符,是一种特殊的符号。用表示数据的运算,赋值和比较。算数运算符赋值运算符比较运算符位运算符逻辑运算符三目运算符1. 算数运算符符号:加(+),减(-),乘(),除(/),取余(%)自增:++自减:–作用在于:整数和浮点型。最终的结果:十进制。只要是byte,short,int,long,char,float,double相加结构都是十进制。所有的运算的结果的最小范围一定是:—inta. 自增:++不同行: int a =1; a++; ++a; System.out.println(a); //3 a++ 与 ++a 在不同行效果是等价的。相同行:在运算中,或者逻辑判断中,或者方法的传参中就存在差异了int a =5;int b = a++ + 6;System.out.println(b); // 11System.out.println(a); // 6 int a1 =5;int b1 = ++a1 + 6;System.out.println(b1); // 12System.out.println(a1); // 6分析[int b = a++ + 6;]运算步骤: 先运算再递加。step1: a + 6 = 11step2: a++ = 6 因此结果是 b=11,a=6分析[int b = ++a + 6;]运算步骤: 先递加再运算。step1: ++a1 = 6step2: a1+ 6 = 12 因此结果是 b1=12,a1=6b. 自减:– 跟自增++同理2. 赋值运算符等号 =,只要赋值了就修改内存控制的二进制基础数据类型的默认值: byte short int long 都是0 float double == 0.0 boolean == false char==u0000 空格赋值运算符的扩展: +=,-=,=,/=,%=3. 比较运算符 < > == >= <= != 用于条件判断中a. == 逻辑判断,是内存地址的比较-(二进制),还需考虑前面的数据类型。 b. = 赋值 “==” 数字是值的比较,对象(封装数据类型)是内存地址的比较。 如果是基础数据类型值比较==,值相等那么都是true,如果是封装数据类型都是false—hashCode()4. 逻辑运算符短路:或 || 且 && 非 !不短路:或 | 且 & 非 ^ (从性能上讲,不推荐使用。)5. 三目运算符格式:(逻辑判断(boolean))?true:fakse;6. 位运算符(7个) —计算>> 右移运算符>>> 无符号右移<< 左移,二进制整体往左边移动两位,空白位用0填充。& 按位与,如果两个同时为1返回就是1,其他的都是0。| 按位或,如果有一位是1那么就是1,其他的都是0。^ 按位异或,两个相同的时候0,不同时返回1。~ 按位非,单数字取反作用:快速计算一个数字想要得到结果,最终都是以二进制的方式进行计算。思路: 把十进制转成二进制,再进行移位操作。true & false —逻辑符合5 & 9 —位运算 ...

March 4, 2019 · 1 min · jiezi