Skip to main content

JS 运算符和语句

运算符#

布尔操作符 (与 或 非)#

//会被转换为 false 的表达式有:nullundefinedNaN0"" or '' or `` // 空字符串
  • &&

全真为真,有假即假 (全真教)

let result = true && false

第一个参数第二个参数结果
turetruetrue
falsetruefalse
truefalsefalse
falsefalsefalse
  • 如果第一个操作数是对象,则返回第二个操作数。
  • 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象。
  • 如果两个操作数都是对象,则返回第二个操作数。
  • 如果有一个操作数是null,则返回null。
  • 如果有一个操作数是NaN,则返回NaN。
  • 如果有一个操作数是undefined,则返回undefined。
  • 使用单个 & 判断奇偶性 偶数 & 1 = 0

奇数 & 1 = 1

console.log(7 & 1); // 1console.log(8 & 1) ; // 0
  • ||

有真即真,全假为假

let result = true || false;

第一个参数第二个参数结果
turetruetrue
falsetruetrue
truefalsetrue
falsefalsefalse
  • 如果第一个操作数是对象,则返回第一个操作数。
  • 如果第一个操作数求值为false,则返回第二个操作数。
  • 如果两个操作数都是对象,则返回第一个操作数。
  • 如果两个操作数都是null,则返回null。
  • 如果两个操作数都是NaN,则返回NaN。
  • 如果两个操作数都是undefined,则返回undefined。

&&||都是短路计算

( false ) && (expr) //短路计算的结果为假。( true ) || (expr) //短路计算的结果为真。

短路意味着上述表达式中的expr部分不会被执行,

  • !

取反 !结果转布尔 !!结果
!falsetrue!!falsefalse
!truefalse!!truetrue
!"blue"false!!"blue"true
!0true!!0false
!NaNtrue!!NaNfalse
!undefinedtrue!!undefinedfalse
!" "false!!" "true
!123false!!123true
!function() {}false!!function() {}true
!{}false!!{}true
!{ a: 1 }false!!{ a: 1 }true
![1, 2]false!![1, 2]true
  • 如果操作数是对象,则返回false。
  • 如果操作数是空字符串,则返回true。
  • 如果操作数是非空字符串,则返回false。
  • 如果操作数是数值0,则返回true。
  • 如果操作数是非0数值(包括Infinity),则返回false。
  • 如果操作数是null,则返回true。
  • 如果操作数是NaN,则返回true。
  • 如果操作数是undefined,则返回true。

取反操作

console.log(!false); //trueconsole.log(!true); //falseconsole.log(!"blue"); // falseconsole.log(!0); //trueconsole.log(!NaN); //trueconsole.log(!undefined); //trueconsole.log(!" "); // falseconsole.log(!123); // falseconsole.log(!function() {}); // falseconsole.log(!{}); // falseconsole.log(!{ a: 1 }); // falseconsole.log(![1, 2]); // false

转布尔值(等价于Boolean())

console.log(!!false); //falseconsole.log(!!true); //trueconsole.log(!!"blue"); // trueconsole.log(!!0); //falseconsole.log(!!NaN); //falseconsole.log(!!undefined); //falseconsole.log(!!" "); // trueconsole.log(!!123); // trueconsole.log(!!function() {}); // trueconsole.log(!!{}); // trueconsole.log(!!{ a: 1 }); // trueconsole.log(!![1, 2]); // true

所有非0的值都是true,包括负数、浮点数:

console.log(!!7); // trueconsole.log(!!0); // falseconsole.log(!!-1); // trueconsole.log(!!0.71); // true

= 、 == 和 === 的区别#

// 一个等号表示赋值// 两个等号表示比较等号左右两边的值是否相等// 三个等号表示两个值全等(包括数据类型也相同)

位运算#

  • 使用 ^ 切换变量 01
// --- before ---// if 判断if (toggle) {    toggle = 0;} else {    toggle = 1;}// 三目运算符togle = toggle ? 0 : 1;
// --- after ---toggle ^= 1;
  • 使用~>><<>>>|来取整 相当于使用了 Math.floor()
console.log(~~11.71) // 11console.log(11.71 >> 0) // 11console.log(11.71 << 0) // 11console.log(11.71 | 0) // 11console.log(11.71 >>> 0) // 11

注意 >>> 不可对负数取整

  • 使用^来检查数字是否不相等
// --- before ---if (a !== 1171) {...};
// --- after ---if (a ^ 1171) {...};
  • 使用 Array.length = 0 来清空数组
  • 使用 Array.slice(0) 实现数组浅拷贝
let arr = [0,1,2,3]let b = arr.slice(0) //不就相当于 let b = arr;吗,不知道这个方法有什么用console.log(b)

语句#

  • 条件语句

条件语句 if else if 后面括号跟的值返回的是一定是 true 或者 false if 可以独立使用 if else if 只要有一个条件成立就不在继续往下走了

if (条件js) {  //条件成立}if (条件js) {  //条件成立} else {  // 条件不成立}// if \ else if \ else 只要有一个条件成立就不在继续执行var c = 9;if (c > 9) {  alert('第一个条件');} else if (c > 7) {  alert('第二个条件');} else if (c > 8) {  alert('第三个条件');} else {  alert('第四个条件');}
  • 三元表达式 if else的简化版 语法:条件?条件成立的执行语句:条件不成立的执行语句
 var age = 19 age>=18?document.write('成年'):document.write('未成年') var  money = 200 // 函数里面如果有三元 return需要在语句的最前面 function str(){    return money>100?'买的起':'买不起' } str()
  • 条件判断语句switch case
// 基本写法switch(条件){  case  条件对比:    // 如果条件成立走这里    break    default:      //如果条件全都不成立走这里}
  • for 循环 批量处理数据
for(初始化条件;终止(退出)条件;最终条件)++自增运算符 每次会自动加1for(var i=0;i<10;i++){  //执行语句  console.log(i) //0 1}
  • break 直接跳出当前循环 并不在进行下次循环
  • continue 直接跳出当前循环 并进行下次循环
var ary1 = [1, 2, 3, 4, 5, 6, 17, 19, 30];// 1. 计算除了17之外其他数的和// 2. 计算 17之前所有数的和var sum = 0;for (var i = 0; i < ary1.length; i++) {  if (ary1[i] == 17) {    //continue 1    break; //2  }  sum = sum + ary1[i];}console.log(sum);
  • for 循环条件的简写
// --- before ---for(let i = 0; i < arr.length; i++) {...}
// --- after ---for(let i = arr.length; i--;) {...} // 注意 i-- 后面的分号别漏了
危险

注意不要在控制台输入这个代码!!! (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]
😂😂😂😂