真不是考试的料啊,一到考试就会犯懵,这篇博客记录一下考试的时候遇到的自己做不对的点.
-
浮点数运算
let y = 0.3 - 0.2 y === 0.1 //false
原因很简单,因为JS在进行浮点数运算的时候会存在误差,所以0.3 - 0.2 不等于0.1(唉,考试的时候怎么就没想到啊,懵啊懵)
要解决浮点数运算,一个办法是使用toFixed(),截取部分,不过这样不够准确(有些时候需要精确数值),另一个办法是把它们乘成10的n次幂,进行运算后再出去10的n次幂,这样就比较准确了,不过浮点数转成转成整数后得小于安全值2^53。 -
eval()
这个真是被自己坑了,自己当时看书看到书上说尽量不要用eval(),就没关注eval(),笔试后好好看了一下eval()
首先,eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码
明确一下eval()不能在严格模式下使用,不然会报错;
然后,eval在函数中创建的变量是局部变量,就如当然有办法让eval创造全局变量,就是使用window.eval()
-
with()
这个with()有延长作用域链的作用,自己之前做了笔记,贴出来在Javascript的作用域中(作用域,想想就是函数块,每个函数都会有个函数名,就算是匿名函数也有个空函数名),那么创建作用域的时候,本层的标识符就可以寄托在这个作用域下,而with语句块中作用域的‘变量对象’是只读的,不能存储标识符,只能存储在其上一层,这就是延长作用域链。with中首先查找的是with里的参数,再查找with所在函数作用域的参数,再查找相关对象(…参数)的属性,如果没有,再查找全局变量的值。
记录到的就这么多啦,如果有错误,希望大家指出共同进步。同时希望自己能找到实习,fighting!