@wy
2018-09-07T21:27:45.000000Z
字数 1894
阅读 533
面试题
作用:会将传入的字符串当做 JavaScript 代码进行执行
语法:eval(string)
说明:string是有效 JavaScript 代码。
安全问题: 当使用不可信任来源的代码时,谨慎使用 eval 解析。
缺点:
1. 可读性差
2. 不利于调试
3. 增加性能消耗
4. 破坏执行作用域
补充说明:
let s = '({"b":20,a:90})'
console.log(eval(s));
现在使用JSON.parse代替。
var a = 10; // 全局变量
let js = 'var a = 10000; console.log(a);'
function test(){
var b = 30;
eval(js); // 执行后在全局重新定义了变量a
eval('var b = 50;'); // 执行后覆盖局部的变量b
console.log(b); // 输出为50
}
test();
console.log(a); // 结果为10000
执行代码后并不是在局部定义变量,而是在全局定义了变量 a
执行代码后在局部重新定义了b变量,把局部变量覆盖了。
多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms
首先需要了解parseInt的完整用法:
作用:解析一个字符串参数,并返回一个指定基数的十进制的整数
语法:parseInt(string, radix);
说明:radix一个介于2和36之间的整数,标示string字符串的基数。默认这个基数是10
例如:
parseInt('100', 10); 结果为:100
意思是把100通过基数10转成10进制的数字,结果还是100
数字100,从右到左从低位到高位,位置从0开始,依次乘上10为基数的次方,然后加上总和:
1*10^2 + 0*10^1 + 0*10^0 = 100 + 0 + 0 = 100;
parseInt('100', 2); 结果为:4
意思是把1000通过基数2转成10进制的数字,如下操作,把数字转成10进制:
数字100,从右到左从低位到高位,位置从0开始,依次乘上2为基数的次方,然后加上总和:
1*2^2 + 0*2^1 + 0*2^0 = 4 + 0 + 0 = 4;
parseInt('100', 3); 结果为:9
意思是把1000通过基数3转成10进制的数字,如下操作,把数字转成10进制:
数字100,从右到左从低位到高位,位置从0开始,依次乘上3为基数的次方,然后加上总和:
1*3^2 + 0*3^1 + 0*3^0 = 6 + 3 + 0 = 9;
一直到基数为36都成立。。。
但是要注意,传入的数字每一位不能大于等于基数,否则返回NaN,例如:
parseInt('200', 2); 结果为:NaN
parseInt('301', 3); 结果为:NaN
再说map方法的使用,主要是map回调函数的使用
[1,2,3].map((item,index) => {
这个回调函数接收的是每一项item,和下标index
})
回到题再来看一下,["1","2","3"].map(parseInt)
使用map循环数组,传入parseInt,此时parseInt会接受两个参数,每一项和下标,就类似这样:
["1","2","3"].map(function parseInt(item,index){
...
})
具体到调用parseInt接收的参数:
parseInt('1',0) // 基数不能为0,直接返回前面数字 结果为1
parseInt('2',1) // 基数为1,前面数字位数有大于1的,结果为NaN
parseInt('3',2) // 基数为2,前面数字位数有大于2的,结果为NaN
map返回值是数组,所以最终结果为: [1,NaN,NaN]
参考:http://witcher42.github.io/2014/06/03/open-web-platform/
函数默认参数
模板字符串
扩展运算符...
解构赋值
箭头函数 =>
Promise对象解决异步回调
块级作用域的let和const
类class,继承extend
模块化es6 module
参考:http://es6.ruanyifeng.com/
flash被浏览器抛弃了,只用ajax。(自行回答,没赶上用flash的时代)