2020.4.11

2.5 关于省略行尾分号

js并不是在所有换行处都添加分号,只有缺少分号无法解析代码时才添加。所以,若出现

var y=x+f
(a+b).toString()
这样的代码,会解析成
var y=x+f(a+b).toString() //把f当函数了

 所以还是加分号。

3 垃圾回收策略

当不再有任何引用指向一个对象,解释器就知道此对象没用了,自动回收它。

3.1.3 特殊数值的比较

NaN==NaN //false
NaN!=NaN //true
isNaN(NaN) //true
/*当运算结果发生下溢结果为-0*/
-0==0 //true
1/0==1/-0 //false,Infinity!=-Infinity

3.3 if中判断空值

if (obj!==null)... //只要obj不等于null时
if (obj)... //obf不是false或任何假值(null,undefined,0,"")才运行

3.4 null和undefined的区别

undefined可以理解为系统级的、出乎意料的值的空缺,null表示程序级的、正常可预料的空值。

3.6 不可变值和包装对象

对不可变值(number,bool,string)变量调用属性和方法,不会修改变量本身,而是在调用的语句创建临时的包装对象。

var s="test"
s.len=4 //创建包装对象,String(s).len=4
var t=s.len //t==undefined

可使用String(),Number(),Boolean()显式创建包装对象。

3.7 对象的比较

对象间的比较不是看两对象包含同样的属性和值,而是看是否指向一个引用。

3.8 类型转换

几个易错的:

字符串 数字 布尔值 对象
undefiend   NaN   throws TypeError
null   0   throws TypeError
""   0 false  
-0 "0"   false  
-Infinity "-Infinity"   true  
Infinity     true  
[] "" 0 true  

 

  

 

 

 

 

 

3.8.1 原始值的相等性和转换

number,string,bool相互比较时全部转为数字再比较。

3.8.2 number转换格式的函数

number=123456.789
toString(radix=10) //转换的基数可以为2,8,10,16,36
toFixed(5) //小数点后几位
toExponential(1) //1.2e+5
toExponential(3) //1.235e+5
/*toPrecision指定包括整数部分的有效位数,
若指定位数小于整数部分,转换为指数形式*/
toPrecision(4) //1.235e+5
toPrecision(10) //123456.7890
/*所有方法都会自动补零和四舍五入*/

parseInt和parseFloat会跳过前导空格,尽可能解析更多数值字符,并忽略后面内容。

3.8.3 对象转换为原始值

对象到字符串:先尝试toString,再尝试valueOf后转成字符串

对象到数字:先尝试valueOf,再尝试toString后转成数字

3.10.1 变量作用域

所有var实际上在整个函数内都可引用(包括定义前),这被称为声明提前(hoisting)。

3.10.3 作用域链

在函数作用域中使用变量x,js现在最底作用域查找x,若无则到上一级作用域查找,以此类推,直到找到或找过最终的全局作用域。

4.3 数组初始化写法

var arr=[1,,,,5] //会生成3个undefined元素
arr[1,2,] //结尾的','并不会生成undefined元素

4.9.1 严格相等符===

null===null //false
undefined===undefined //false
0===-0 //true
//若两字符串含义和显示的字符也一样,但16编码不同,则为false
//有方法String.localeCompare()

  

posted @ 2020-04-11 23:24  lpjworkroom  阅读(95)  评论(0编辑  收藏  举报