发表于: 2018-05-31 22:50:11

1 570


今天完成的事情,学习了js操作符

明天计划的事情,学习js变量、作用域和内存的问题;

今天的收获:

  • 逻辑非  ! 无论这个值是什么数据类型,非操作符都会将它转换为一个布尔值,然后再求反;一般用来判断某个元素是否存在,也可以用来转换一个值相应的布尔值,需要同时使用两个操作符  !! 
var a = 10;
function text () {
if ( a != 0) {
a= 30;
}
}
text(); //a=30
  • 逻辑与 && (一般用在条件判断语句 ,两个true就会返回true,只要有一个false就返回false;
    • 第二个操作数是对象,只有在第一个操作数的求值结果为true的情况下才会返回对象
var a = true;
console.log(a &&  “b”);//返回b
var a = false;
console.log(a && "a");//返回false
  • 第一个操作数是对象,就返回第二个操作数
var a = true;
console.log("b" && a);//返回true
  • 两个操作数都是对象,就会返回第二个操作数
console.log(b" && "a");//返回a
  • 第一个操作数是NaN,就会返回NaN;
  • 第一个操作数是null,就会返回null;
  • 第一个操作数是undefined,就会返回undefined;
  •  与操作符属于短路操作,第一个操作符是false,就不会对第二个求值了,第一个是true,就会对第二个求值,如果第二个没有声明的话就会报错;
var b = true;
console.log(b && number);//number is not defined
  • 逻辑或 ||  ,只要有一个真就返回真,两个false就返回false;
    • 第一个操作数是对象,就返回第一个操作数
var a = false;
console.log( "b" || a);//返回b
  • 第一个是求值结果是false,第二个操作数是对象,返回第二个操作数;  第一个求值结果是true,返回true;
var a = false;
console.log( a || "b");//返回b
  • 两个操作数都是对象,则会返回地一个操作数,  和&&操作符刚好相反,&&是取得第二个操作数;
console.log a" || "b");//返回a
    • 两个操作数同时都是 unll / undefined / NaN  ,就会返回null/undefined/NaN; 
    • 或操作符也是短路操作符,第一个求值结果为true,就不会对第二个操作数进行求值了,
  • 乘性操作符,操作数不是数值,后台会先使用number( )转型函数将其转换为数值,空字符串当做0,布尔值true当做1
    • 乘法 规则
      • 两个数都是数值,按正常乘法计算,如果超过了数值范围,返回Infinity或者-Infinity;
      • 一个操作数是nan,结果是nan, infinity和0相乘,结果是nan;
      • infinity和非0的数值相乘,返回的结果是infinity或者-infinity,结果取决于有符号操作数的符号;infinity和infinity相乘的结果是infini;
      • 如果有一个操作数不是数值的话,后台会调用number( )方法转换为数值再应用上面的规则;
    • 除法 规则
      • 操作数都是数值,按常规的除法计算,商超出了ECMAScript数值的表示范围,就返回infinity或者-infinity;
      • 只要有一个操作数是nan,返回的结果就是nan。
      • infinity除以infinity的结果是nan;0 被 0 除,结果是nan;
      • 如果是非零的有限数被零除,结果是infinity或者-infinity ,infinity被任何非零数值除,结果和左边相同;
console.log(5/0);//Infinity
  • 如果不是数值,后台会调用number( )转换为数值,再应用上面的规则
  • 求模
    • 如果被除数是无穷大的而除数是有限大的值,会返回nan;
vara=NumberMAX_VALUE*NumberMAX_VALUE
console.log(a % 12); // NaN
  • 如果被除数是有限大的数值而除数是零;返回NaN
console.log( 12 % 0 );// NaN
  • infinity被infinity除,结果是NaN
  • 被除数是有限大的数值而除数是无穷大的数值,结果是被除数;
var a = Number.MAX_VALUE * Number.MAX_VALUE;
console.log(12%a);//12
    • 被除数是零,结果是零
    • 不是数值会调用number()方法转换为数值,再进行上面的操作;
  • 加性操作符
    • 加法 + ,如果两个操作数都是字符串,纳闷两个字符串将会被拼接起来; 只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再拼接起来;
      • 有一个nan,结果是nan; infinity+infinity=infinity ,-infinity+-infinity=-infinity,+infinity+-infinity=nan;
      • +0 + -0 =+0; 
    • 减法 -  ,减法和加法不一样的地方就是如果是字符串的话,减法会调用number( )将其转换为数值,然后再进行减法计算了;
  • 关系操作符 <、 >、 <=、>=
    • 两个操作数都是数值的话就正常数值比较;
    • 两个操作数都是字符串,比较两个字符串对应的字符编码(如果字符串内含有多个字符,只会比较第一个字符),ASCII码http://ascii.911cha.com/ ,转换位ascii码的方法是charCodeAt();
    • 一个操作数是对象的话就会调用value( )方法或者tostring( )方法,然后按照前面的规则比较
    • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较;
  • 相等操作符 ==相等,!=不相等(先转换操作数再比较),===全等 !==不全等(不转换直接比较)
    •  相等和不相等的转换规则
      • 一个操作数是布尔值,转换,false为0,true为1;
      • 一个是字符串,一个是数值,先将字符串转为数值;
      • 一个操作数是对象,另一个不是,调用对象的valueof( )方法,再比较;
    • 比较规则
      • null和undefined 是相等的,比较之前不能将null和undefined转换为其他任何值; 但是在全等的情况下是不相等的;
console.log(null==undefined);//true
表达式表达式表达式
null == undefinedtruefalse == 0true“5” == 5true
“nan” == nanfalsetrue == 1 true

5 == nanfalsetrue == 2false

nan == nanfalseundefined == 0false

nan != nantruenull == 0false

  • 全等和不全等 ===全等  !==不全等  ,只在两个操作数未经转换就相等的情况下就返回true
    
  • (三元)条件操作符
    • var max = (num1 > num2) ? num1 : num2  这个例子是说max会保存一个最大值,也可以这样理解条件操作符,如果num1>num2, num1的值赋给max,否则num2的值赋给max;
    • 可以用来简化判断,上面的例子其实就是if else的语句
  • 赋值操作符 ,
var num = 10 ;
num = num +10;  等价于  num += 10; 符合赋值操作符;
  • 逗号操作符
    • 可以在一条语句中执行多个操作,在赋值的时候用逗号操作符会返回表达式的最后一项;




  • break语句
    • break与语句会立即退出最内层循环,强制执行循环后面的语句,如果后面还有语句的话
var num = 0;
for (var i = 1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
console.log(num);// 1 2 3 4
}
  • continue语句也是立即退出循环,但退出循环后会从循环的顶部继续执行,只要控制表达式满足,就会再次进行循环,直到不满足条件,然后继续执行循环后面的语句;
var num = 0;
for (var i = 1; i < 10; i++) {
if (i % 5 == 0) {
continue;
}
console.log(i);
num++;  //  1 2 3 4   6 7  8 9 
}
  • label语句,一般配合break和continue在for中使用,让退出跳转到要返回到的标签(位置),一般在多层嵌套中使用!
    • 使用label语句一定要使用描述性的标签,同时不要嵌套过多的循环;



返回列表 返回列表
评论

    分享到