发表于: 2019-10-18 23:36:13
1 869
今日完成的事
复习js基础
Number数据类型 就是0 12 -12 12.5等0 整数 负数 小数和NaN
NaN:not a number意思是不是一个数,但是属于number类型。
NaN可能是任何东西,NaN和任何其他值都不相等,包括他自己
IsNaN:is not a number意思是非有效数字。
IsNaN()函数是用来检测当前这个值是否为非有效数字,如果不是有效数字检查结果是true,是有效数字为false。
注意一点当用isNaN检测值的时候,检测的值不是number类型的,浏览器会默认用Number()函数把值先转换为number类型,然后再去检测。
所以isNaN(”12”)检测结果为false。
Number()把其他数据类型转化为number类型的值。
所以Number(”12”)=12,isNaN(“12”)的值是false。
使用Number转化时只要出现任何一个非有效数字字符,结果就是NaN。
Number(true)=1
Number(false)= 0
Number(null)= 0
Number(undefined)=NaN
引用数据类型转换成Number首先用tostring()函数转化为字符串,再把字符串转化为number即可,空数组转化为空字符串。
只有一个数字或者空的的数组可以转化成number,但是其他引用数据类型转化为number就是NaN,空字符串转化成数字0。
空对象转化成字符串是 object object 。
变量提升
在浏览器执行第一行代码之前会进行变量提升和函数定义,变量提升只会发生在当前作用域
浏览器在执行创建函数这一步时候会跳过,因为在开头函数就已经被定义了。
带var和不带var的区别,在全局作用域下声明一个变量相当于给window全局对象设置了一个属性,变量的值就是属性值(私有作用域下的私有变量和window没有关系),全局变量一改,window属性值也修改,window.a的值修改,变量a的值也改,全局变量和Window中的属性存在映射机制(一个改另一个也跟着改),私有作用域,要是一个变量不带var会向上级作用域查找,不是继续向上查找,一直找到window,这种查找叫做作用域链,不带var的不是变量,是给window增添一个属性。If条件下 的条件提升,在当前作用域下,不管是否成立都要进行变量提升,带var的只是声明,带function的在老版本浏览器渲染机制下,声明加定义都处理,但是为了迎合ES6中的块级作用域,新版本浏览器对于函数(在条件判断中的函数),不管条件是否成立,都只是先声明,没有定义。If判断为true,进入if体后才会进行提升和定义
关于重名的处理,如果名字重复了,不会重新声明,只会重新赋值,不管是执行的时候还是提升的时候
Es6基于let或者constant创建的变量或者函数不存在变量提升并且切断了全局变量与window属性的映射机制
null和undefined
null:空,没有
undefined:未定义
空字符串与null的区别,空字符串开辟了内存,消耗了一点性能,null一点没有。
Null与undefined区别,null一般指现在没有,以后可能有也可能没有,但是预期想有。一般都是手动赋值为null,后期在赋值。Undefined是完全没在预料之内的。
明天计划的事
把搜索写完
遇到的困难
搜索比想象中的要难许多
收获
对业务逻辑的理解更加深刻了。
评论