0/0// NaN'a'/'b'// NaNNaN/NaN// NaNtypeofInfinity// Number
运算
4%6// 取余 45%3// 取模 2// 交换两个变量的值
a = a + b
b = a - b
a = a - b
let a =5, b;
b =--a +--a;// b:7 a:3
b =--a + a--;// b:8 a:3
b =--a + a++;// b:8 a:5// number - string > number - number// string - string > ASCII - ASCII ASCII大于255则是中文,charCodeAt()// == 不看数据类型 === 不仅比较数值,也比较数据类型NaN==NaN;// false
在`JavaScript`中,只有一个值不等于自身,那就是`NaN`。而且几乎所有的值都有属性,而`null`和`undefined`没有。
falsty的值有:null, undefined,0,false,'',' ',NaN
JavaScript中出现小数精度问题原因我们要站在计算机的角度思考 0.1+0.2 这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看
switch和if应用场景
switch :当值已经固定了
if :当数据是有一个范围的时候
for循环
for(let i =0; i;i++){
# 内部可以通过break跳出循环
# 可以通过 i =0 跳出循环
# 如果for循环在函数里面,可通过return跳出循环
}// 思考与while的区别let i =100;for(;i--;){
console.log(i);}
typeof
typeof(x);// 输出都是字符串,而且在里面输入没有定义的变量也不会报错typeof(null);// 之所以返回object是因为JavaScript的一个bug,为了指定空对象提出来的。typeof('1'-'1');// number
console.log(a);// ReferenceError
console.log(typeof(a));// undefined
console.log(typeof(typeof(a)));// string
严格模式
# 如果浏览器不支持严格模式,那么就不会报错
如果是函数的话可能会报错,所以只能从数字和字符串中选择,而字符串最合理
'use strict';
严格模式禁用:caller、callee、with、必须声明变量、var a = b =1, 函数内的this指向undefined,在严格模式下调用函数要通过call来改变this的指向,函数参数不能重复、对象的属性名拒绝重复(但不报错),eval在严格模式下是有作用域的不能在全局访问,不能使用八进制,而且在严格模式下给封印的属性赋值扩展、赋值会报错
在非严格模式下,call会将第一个参数装箱。