1. null与undefined的区别:
let x;
alert(x); //(undefined)
let x=null;
alert(x);//(null)
summary:
- 用undefined来表示一个变量declared但是unassigned的状态;
- 用null来表示一个变量是空的, 变量名可以直观地理解成装data的box, null就表示这个box是empty/nothing。
2. 在字符串中插入variable/expression:
let name="john";
let greetings=`Good morning, ${name}, it is a nice day!`;
console.log(greetings);
3. 把非Number转换成Number的3个函数: Number(),parseInt(),parseFloat()
- Number()
input | output |
---|---|
true | 1 |
false | 0 |
null | 0 |
undefined | NaN |
当input是字符串的时候,情况会变得有一点点复杂,首先Number()会忽略leading and trailing whitespace, 也会忽略leading zero,再处理剩下的字符串,如果remaining string存在除了数字和小数点以外的字符,return NaN.
由于Number在处理字符串时十分不合理,当输入是字符串的时候,往往采用parseInt()和parseFloat().
Tip: 当'+'作为一元操作符(unary operator)的时候,作用与Number()相同.
4. '==' 和 '==='
- '==' 会默认把两端的操作数隐式转换成number type,所以会出现下面空字符串和false相等的情况。
alert("" == false) // returns true, 因为Number("")->0, Number(false)->0.
- strict equal '==='
对于两个不同类型的操作数,strict equal不会执行隐式类型转换,而是直接返回false.
sweet couple: null和undefined
null == undefined
//returns true, 两者默认相等,在==的情况下,null不会转换成0, undefined也不会转换成NaN.
null >= 0 // returns true, 因为在其他comparison(>,>=,<,<=)情况下, null->0.
null === undefined // returns false obviously.
对于undefined也是相同的,默认undefined只能与null相等(==, 非===),而在其他comparison情况下, undefined被转换成NaN.