js ~取非运算符的妙用,将-1转为0(或假值)

本文详细解析了JavaScript中的按位取反运算符(~)的工作原理,通过实例展示了正数和负数输入时该运算符的具体计算过程,并给出了实际应用场景示例。

Javascript 按位取反运算符 (~) ,对一个表达式执行位非(求非)运算。如 ~1 = -2; ~2 = -3;~-1=0
这个符号很少见,前端js写了那么久,竟然还是第一次遇到。既然遇到了,就不能直接略过。
~1=-2是如何实现的呢,下面我们来看看计算过程

  • 输入为正数(1和2)
1)二进制原码:0000 00010000 00102)按位取反:1111 11101111 11013)转成原码二进制,由于第一位是1,因此为负数

(4)负数转成原码,第1位符号位不变,其余取反+11000 00101000 00115)原码二进制转成十进制则为 -2-3

因此 ~1=-2~2=-3
  • 输入为负数(-1,-2)
1)二进制原码:1000 00011000 001021开头为负数,保持第1位符号位不变,取反+1,得到补码:1111 11111111 11103)取反得到结果0000 00000000 00014)转成十进制则为01

典型的运用场景就是indexOf
在这里插入图片描述

var n = -4.9;
console.log(n); //4.9
n = ~n;
console.log(n);//3
n = ~n;
console.log(n);//4

var n = 4.2;
console.log(n); //4.2
n = ~n;
console.log(n);//-5
n = ~n;
console.log(n);//4

var n = 4;
console.log(n); //4
n = ~n;
console.log(n);//-5
n = ~n;
console.log(n);//4
第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和都相等,双等号只需要相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔true转为数字1,布尔false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较相等返回true。 需要特别注意的是,以上仅仅适用于对象类型。对于对象类型,相等者严格相等比较的都是对象的引用,而不是具体的,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的转换为布尔都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真时,返回右操作数。当左操作数为时,返回左操作数。 逻辑 逻辑同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真时,返回左操作数。当左操作数为时,返回右操作数。 逻辑 逻辑只有一个操作数,!后连接操作数表达式,意思是将操作数反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出: False 第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和都相等,双等号只需要相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔true转为数字1,布尔false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较相等返回true。 需要特别注意的是,以上仅仅适用于对象类型。对于对象类型,相等者严格相等比较的都是对象的引用,而不是具体的,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的转换为布尔都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真时,返回右操作数。当左操作数为时,返回左操作数。 逻辑 逻辑同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真时,返回左操作数。当左操作数为时,返回右操作数。 逻辑 逻辑只有一个操作数,!后连接操作数表达式,意思是将操作数反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出: False 第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和都相等,双等号只需要相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔true转为数字1,布尔false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较相等返回true。 需要特别注意的是,以上仅仅适用于对象类型。对于对象类型,相等者严格相等比较的都是对象的引用,而不是具体的,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的转换为布尔都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真时,返回右操作数。当左操作数为时,返回左操作数。 逻辑 逻辑同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真时,返回左操作数。当左操作数为时,返回右操作数。 逻辑 逻辑只有一个操作数,!后连接操作数表达式,意思是将操作数反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出: False 第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和都相等,双等号只需要相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔true转为数字1,布尔false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较相等返回true。 需要特别注意的是,以上仅仅适用于对象类型。对于对象类型,相等者严格相等比较的都是对象的引用,而不是具体的,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的转换为布尔都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真时,返回右操作数。当左操作数为时,返回左操作数。 逻辑 逻辑同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真时,返回左操作数。当左操作数为时,返回右操作数。 逻辑 逻辑只有一个操作数,!后连接操作数表达式,意思是将操作数反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出: False 第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和都相等,双等号只需要相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔true转为数字1,布尔false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较相等返回true。 需要特别注意的是,以上仅仅适用于对象类型。对于对象类型,相等者严格相等比较的都是对象的引用,而不是具体的,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的转换为布尔都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真时,返回右操作数。当左操作数为时,返回左操作数。 逻辑 逻辑同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真时,返回左操作数。当左操作数为时,返回右操作数。 逻辑 逻辑只有一个操作数,!后连接操作数表达式,意思是将操作数反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出: False 第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和都相等,双等号只需要相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔true转为数字1,布尔false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较相等返回true。 需要特别注意的是,以上仅仅适用于对象类型。对于对象类型,相等者严格相等比较的都是对象的引用,而不是具体的,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的转换为布尔都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真时,返回右操作数。当左操作数为时,返回左操作数。 逻辑 逻辑同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真时,返回左操作数。当左操作数为时,返回右操作数。 逻辑 逻辑只有一个操作数,!后连接操作数表达式,意思是将操作数反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出
最新发布
10-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeviesBob

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值