面试题:延迟加载JS有哪些方式?
延迟加载:async、defer
例如:<script defer type="text/javascript" src=script.js'></script>
defer :等html全部解析完成,才会执行js代码,顺次执行js脚本。
async : async是和html解析同步的(一起的),不是顺次执行js脚本(谁先加载完谁先执行)。
面试题:JS数据类型有哪些?
基本类型:string、number、boolean、undefined、null、symbol、bigint
引用类型:object
NaN是一个数值类型,但是不是一个具体的数字。
console.log( true +1 );---1
console.log( 'name '+true );---2
console.log( undefined +1 );----nan
console.log( typeof undefined );----undefined
//字符串和其他类型相加,变成连接的形式
面试题:null和undefined的区别
- 作者在设计js的都是先设计的null(为什么设计了null:最初设计js的时候借鉴了java的语言)
- null会被隐式转换成0,很不容易发现错误。
3.先有null后有undefined,出来undefined是为了填补之前的坑。
JavaScript的最初版本是这样区分的: null是一个表示"无"的对象(空对象指针),转为数值时为0; undefined是一个表示"无"的原始值,转为数值时为NaN
console.log( Number( hull ) );-----nan
面试题:==和===有什么不同?
==: 比较的是值
string == number ll boolean ll number ... .都会隐式转换
通过valueOf转换(valueOf()方法通常由JavaScript在后台自动调用)
====:除了比较值,还比较类型
如果做这个重写---就不会都会隐式转换
0bject.prototype.value0f = function{alert(123);}
面试题︰JS作用域考题
1.除了函数外,js是没有块级作用域。
2.作用域链:内部可以访问外部的变量,但是外部不能访问内部的变量。
注意:如果内部有,优先查找到内部,如果内部没有就查找外部的。
3.注意声明变量是用var还是没有写(window . )
4.注意:js有变量提升的机制【变量悬挂声明】
5.优先级︰声明变量〉声明普通函数〉参数〉变量提升
面试的时候怎么看:
- 本层作用域有没有此变量【注意变量提升】
- 2.注意:js除了函数外没有块级作用域
3.普通声明函数是不看写函数的时候顺序
==10
--undifined
JS对象注意点︰ js对象考题
- 对象是通过new操作符构建出来的,所以对象之间不想等;(除引用外)
- 2.对象注意:引用类型;
3.对象的key都是字符串类型;
4.对象如何找属性|方法;│
先在对象本身找===>构造函数中找===>对象原型中找===>构造函数原型中找==>对象上一层原型查找
构造函数创建fun
JS作用域+this指向+原型的考题
普通函数this指向widow
New 的this 指向new 对象
【JS】九、JS判断变量是不是数组,你能写出哪些方法?
Instanceof:不是很严谨。。 因为数组也是对象
方法三:prototype原型
var a= [1,2]
console.log(Object.prototype.toString.call(a).indexOf('Array')>-1)
Typeof---别写
面试题:slice是干嘛的、splice是否会改变原数组
1. slice是来截取的
参数可以写slice(3)、slice(1,3)、slice( -3)返回的是一个新的数组
2. splice功能有:插入、删除、替换返回:删除的元素(splice(指定下标,删除,插入元素))
该方法会改变原数组
el:arr = [‘1’,‘2’,‘3’,‘4’]
作用1:删除元素 — [item]为0
arr.splice(1,1) //[‘1’,‘3’,‘4’]
arr.splice(1,0) //[‘1’,‘2’,‘3’,‘4’]
arr.splice(1,2) //[‘1’,‘4’]
作用2:替换元素 — item为替换的值
arr.splice(1,1,‘x’) //[‘1’,‘x’,‘3’,‘4’] 替换起始下标为1,长度为1的值为x’
arr.splice(1,2,‘y’) //[‘1’,‘y’’,‘4’] 替换起始下标为1,长度为2的两个值为‘y’
arr.splice(1,2,‘x’,‘y’) //[‘1’,‘x’,‘y’,‘4’] 替换起始下标为1,长度为2的两个值
作用3:插入元素 — len设置为0,item为添加的值
arr.splice(1,0,‘x’) //[‘1’,‘x’,‘2’,‘3’,‘4’]
arr.splice(1,0, ‘x’, ‘y’, ‘z’) //[‘1’,‘x’, ‘y’, ‘z’,‘2’,‘3’,‘4’]
面试题:new操作符具体做了什么
1.创建了一个空的对象
2.将空对象的原型,指向于构造函数的原型
3.将空对象作为构造函数的上下文(改变this指向)
4.对构造函数有返回值的处理判断(如果是基本类型,忽略返回值;如果是引用类型,返回return 内容)
闭包面试
原型连
- 原型可以解决什么问题
- 对象共享属性和共享方法
- 2.谁有原型
函数拥有:prototype
对象拥有:_proto_
3.对象查找属性或者方法的顺序
先在对象本身查找 -->构造函数中查找-->对象的原型-->构造函数的原型中 --当前原型的原型中查找
4.原型链
4.1 是什么?︰
就是把原型串联起来
4.2原型链的最顶端是null
继承
1es6继承
构造函数实现不了共享,
组合继承:实现了共享,解决了一些原型链存在的一些问题
深拷贝