js有预解析阶段,变量声明提升只提升定义,不提升值
console.log(a);//undefined
var a=10;
Number、String、Boolean、Undefined和Null
Object、Array、Function、RegExp、Date、Map、Set等
使用typeof运算符可以检测值或者变量的类型
3e8表示300,000,000
二进制数值0b开头 八进制数值以0开头 十六进制数值以0x开头
数字11和字符串'11'在语义上是不同的,前者表达一个数量 ,后者是一个文本
repl环境:read读取 eval执行 print打印 loop循环
charAt()方法可以得到指定位置的字符
substring(a,b)方法得到从a开始到b结束(不包括b处)的子串
substr(a,b)方法得到从a开始的长度为b的子串,其中b可以省略,表示到字符串结尾(说明:a可以是负数,表示倒数位置)
slice(a,b)方法得到从a开始到b结束(不包括b处)的子串 它和substring(a,b)区别在:slice(a,b)中参数a可以是负数 和slice(a,b)中参数a必须小于参数b
面试题
toUpperCase()转为大写 toLowerCase()转为小写
indexOf()方法返回某个特定的字符串值在字符串值首次出现的位置,找不到则返回-1
一个没有被赋值的变量的默认值是undefined,而undefined的类型也是undefined
即:undefined又是值,又是一种类型,这种类型只有它自己一个值
用typeof检测null结果是object 数组用typeof检测结构也是object
字符串变为数字:纯数字字符串能变为数字,不是纯数字的字符串将转为NaN
布尔值变为数字:true变为1,false变为0
undefined和null变为数字:undefined变为NaN,null变为0
Number('123'); //123
Number('123.4'); //123.4
Number('123年'); //NaN
Number('2e3'); //2000
Number(''); //0
Number(true); //1
Number(false); //0
Number(undefined); //NaN
Number(null); //0
parseInt函数功能将字符串转为整数
parseFloat函数功能将字符串转为浮点数 功能与parseInt()类似
parseInt('3.14'); //parseInt()将自动截掉第一个非数字字符之后的所有字符 3
parseInt('3.14是圆周率'); //所有文字都将被截掉 3
parseInt('圆周率是3.14'); //如果字符串不是以数字开头,则转为NaN
parseInt('3.99'); //3 不会四舍五入
parseFloat(true); //NaN 说明:true隐式转换字符串true
使用String()函数
使用toString()方法将值转为字符串(常用)
使用Boolean()函数
数字变为布尔值:0和NaN转为false,其他数字都转为true
字符串变为布尔值:空字符串变为false,其他变为true
undefined和null变为布尔值:都变为false
Boolean(123); //true
Boolean(0); //false
Boolean(NaN); //false
Boolean(Infinity); //true
Boolean(-Infinity); //true
Boolean(''); //false
Boolean('abc'); //true
Boolean('false'); //true
Boolean(undefined); //false
Boolean(null); //false
隐式类型转换:如果参与数学运算的某操作数不是数字型,那么js会自动将此操作数转为数字型
隐式转换本质是:内部调用Number()函数
true+true //2
false+2 //2
3*'2天' //NaN
js使用了IEEE754二进制浮点数算术标准,这会使一些个别的小数运算产生丢失精度问题
解决办法:在进行小数运算时,调用数字的toFixed()方法保留指定的小数位数
幂Math.pow(a,b)和开根号Math.sqrt()
Math.pow(2,3) //8
Math.sqrt(81) //9
Math.sqrt(-81) //NaN
向上取整Math.ceil()和向下取整Math.floor()
Math.ceil(-2.4) //-2
Math.floor(-2.4) //-3
相等和全等
两个等号==运算符不比较值的类型,它会进行隐式转换后比较值是否相等
三个等号===运算符既要比较值的类型,又要比较值
不相等和不全等类似相等和全等
5=='5'; //true
5==='5'; //false
面试题
null和undefined用==进行比较涉及隐式强制类型转换(ES5规范中规定)
null和undefined用===进行比较时结果为false是因为类型不同:
typeof null -->object
typeof undefined -->undefined
NaN == NaN //false
NaN === NaN //false
1 == true //true
1 === true //false
0 == false //true
0 === false //false
0 == undefined //false
0 === undefined //false
undefined == null //true
undefined === null //false
isNaN()机理:只要该变量传入Number()的执行结果是NaN,则isNaN()函数都会得到true
isNaN(undefined) //true
isNaN('3天') //true
isNaN(null) //false
非运算(隐式使用Boolean()函数)
!0 //true
!undefined //true
!'' //true
!'mooc' //false
逻辑运算顺序:非-->与-->或
运算顺序:非运算-->数学运算-->关系运算-->逻辑运算
闰年判断:条件满足其一即可:能被4整除且不能被100整除/能被100整除且能被400整除
BMI判断:体重(公斤)/身高的平方(米)