es6的面试题
22 let、const、var的区别
块级作用域,变量提升,添加全局属性,重复声明,暂区时性死,初始值设置
1. let 和const具有作用域
2. var存在变量提升,let和const不存在变量提升
3. 给全局添加属性:
使用var声明的变量,会添加到全局对象window作为属性.可以通过window.变量名访问
let和const不会
4. var声明变量时,可以重复声明变量,相同名变量会覆盖之前声明的。
const和let不允许重复声明变量。
5暂时性死区: 在使用let、const命令声明变量之前,该变量都是不可用的。
这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。
6 初始值设置:在变量声明时,
var 和 let 可以不用设置初始值。
而const声明变量必须设置初始值
23 const对象的属性可以修改吗
答:对象的属性是可以修改的。
因为:
const保证的并不是变量的值不能改动,
而是变量指向的那个[内存地址]不能改动.
对于基本类型的数据(数值、字符串、布尔值),变量指向的那个内存地址.
但对于引用类型的数据(主要是对象和数组)来说,
保存的只是一个指针,const只能保证这个指针的指向是固定不变的。
至于它指向的数据结构【是不是】可变的,就完全不能控制了。
代码解释
const obj={ name:'咋还尼桑' } obj.name='2131' console.log(obj.name);
24.箭头函数与普通函数的区别
最大区别:1.不能使用new,不能作为构造函数。
2.箭头函数不绑定arguments
3.箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值
4.箭头函数没有原型属性 是undefined
5.箭头函数不能当做Generator函数,不能使用 yield 【有d】 关键字
25. 箭头函数的this指向哪⾥?
箭头函数不同于传统JavaScript中的函数,箭头函数并没有属于⾃⼰的this,
它所谓的this是捕获其所在上下⽂的 this 值,作为⾃⼰的 this 值,
并且由于没有属于⾃⼰的this,所以是不会被new调⽤的
26. 扩展运算符的作用及使用场景
取出对象中的所有可遍历属性,拷贝到当前对象之中
let bar = { a: 1, b: 2 }; let baz = { ...bar }; // { a: 1, b: 2 }
数组的扩展运算符:可以将一个数组转为用逗号分隔的【参数序列】,且每次只能展开一层数组。
console.log(...[1, 2, 3]) // 1 2 3 console.log(...[1, [2, 3, 4], 5]) // 1 [2, 3, 4] 5
27. javascript的typeof返回哪些数据类型. 开始的
答案:string,boolean,number,undefined,function,object。
null 数组 是object
28 字符串与数组的转换
split()前者是将字符串切割成数组的形式,
join() 的区别是将数组转换成字符串
巧计:一串串的,像是脚印,join
29 如何阻止事件冒泡
答案:ie:阻止冒泡e.cancelBubble = true; [kan shuo ba bo]
非IE event.stopPropagation(); [ pa p儿 gA xing]
30 如何阻止默认事件
答案:(1)return false;(2) event.preventDefault();
31 创建新节点
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入
32. document load 和document ready的区别
答案:document.onload 是在结构和样式,外部js以及图片加载完才执行js.
document.ready是[dom树创建完成]就执行的方法,原生种没有这个方法,
jquery中有 $().ready(function)
33.Javascript的事件流模型都有什么?
“事件冒泡”:事件由最具体的元素接受,然后逐级向上传播
“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的
“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡
34 js延迟加载的方式有哪些?
1. 按需异步载入js
2.(创建script,插入到DOM中,加载完毕后callBack)、
3. defer和async、动态创建DOM方式
35. 如何获取javascript三个数中的最大值和最小值?
【 mæ θ】Math 数学 Math.max(a,b,c);//最大值 Math.min(a,b,c)//最小值
36.form中的input可以设置为readonly和disable,请问2者有什么区别?
readonly 不可编辑,可以选择和复制;值可以传递到后台
disabled 不可编辑,不能选择和复制;值不可以传递到后台
37 可视区域距离页面顶部的距离
let scrollTop=document.documentElement.scrollTop ||document.body.scrollTop
38. 节点的种类有几种,分别是什么?
(1)元素节点:nodeType ===1;
(3)属性节点:nodeType ===2;
(2)文本节点:nodeType ===3;
元1属2文3
39. {offsetWidth offsetHeight}和{clientWidth clientHeight}的区别
(1)offsetWidth (content宽度+padding宽度+border宽度) (2)offsetHeight(content高度+padding高度+border高度) (3)clientWidth(content宽度+padding宽度) (4)clientHeight(content高度+padding高度) client [k lai en t] Width 【wei d s】
40.判断数组的方式有哪些 (5种)
1.通过原型链做判断
(目标源arr).__proto__ === Array.prototype;
2.通过ES6的Array.isArray()做判断
Array.isArrray(目标源arr); 【əˈreɪ]】
3.通过instanceof做判断
arr instanceof Array
4.通过Array.prototype.isPrototypeOf
Array.prototype.isPrototypeOf(arr) true
5.通过Object.prototype.toString.call()做判断
Object.prototype.toString.call(arr).slice(8,-1) === 'Array';
Object.prototype.toString.call(arr)==="[object Array]"
1.什么是window对象?什么是document对象?
window对象代表浏览器中打开的一个窗口。
document对象代表整个html文档。实际上,
document对象是window对象的一个属性。
3. JS 中的主要有哪几类错误
JS有三类的错误:加载时错误
加载时错误:加载web页面时出现的错误(如语法错误)称为加载时错误。
运行时错误:由于滥用html语言中的命令而导致的错误。
逻辑错误:这些错误是由于对具有不同操作的函数执行了错误的逻辑而导致的
有趣的循环
for(var i = 1; i <= 3; i++){ //建议使用let 可正常输出i的值 setTimeout(function(){ console.log(i); //4 4 4 },0); };
这个问题说明的是:先执行同步,然后再去执行异步。
let 会产生块级作用
为啥是4, i=4的时候,不满足条件,循环了3次。
let 会产生块级做作用域 输出 1 2 3
有趣的题
var a = 100; function test() { alert(a); //100 a = 10; alert(a); //10 } test(); alert(a); //10
写一个获取非行间样式的函数
function getStyle(obj,attr) { if(obj.currentStyle) { return obj.currentStyle[attr]; }else{ getComputedStyle(obi,false)[attr] } }
写一个function,清除字符串前后的空格。(兼容所有浏览器)
String.prototype.trim= function(){ return this.replace(/^\s+/,"").replace(/\s+$/,""); }
程序中捕获异常的方法?
try{ }catch(e){ }finally{ }