1.如何判断js数据类型
第一种 typeof '111' 它会返回一个 字符串类型的返回值 但是不能识别 null 只能用 === 与识别 未定义的变量会返回undefined
第二种 instanceof 不能用于判断原始数据类型 可以判断对象数据类型
2.js的创建函数的几种方法
字面量对象 let arr =[1,2,3] 通过 new Object声明一个对象 利用显示构造函数创建对象
3.js 的宿主对象与原生对象的区别
原生对象:是js中的本地对象 也就是自带的对象 例如 Object Function Array Date RegExp ...
宿主对象:所飞本地对象都是宿主对象所用的DOM BOM都是宿主对象
4.js内置常用对象 并举出该对象的常用方法
数组对象:delete 运算符 删除对象里面的值 但是长度还在 所占空间还在 concat()连接数组 solice()插入删除或者替换数组的元素
时间对象 date 创建时间对象new Date Date.getDate()返回一个月中的某一天....
异常对象 Error Error.name 错误的类型 Error.message可以读取的错误消息
数学对象Math对象 Math.PI() 获取圆周率 Math.abs() 获取绝对值 Math.foor()向下取整去掉小数 Math.runde()四舍五入
5.null 与 undefined的区别
null表示为空值 而 undefined表示的是定义未赋值
6.js中什么情况会返回undefined值
访问声明 但是没有初始化的白能量 访问不存在的属性 访问函数的参数没有被现实的传递的值 没用定义return的函数的隐式返回 函数retunr中没有返回任何东西
7.如何区分数组和对象
ES6中通过 isArray([]) true /flase
通过instanceof识别 [] instanceof true/flase
8.怎么判断两个对象相等
判断两个对象是否指向同一个内存 判断两个对象建名数组是否相等 遍历键名 判断值是否相等
9.什么是伪数组 如何将其转换为真数组
伪数组:具有length属性 按照索引的方式进行储存数据 不具有数组的push pop等方法但是仍可以遍历他们
使用array.from()将假数组,转换为真数组
10.src和href的区别是
src指向外部资源的位置 指向的内容将会嵌入到文档中当前标签的所在位置 请求src资源时会将其指向的资源下载并应用到文档中
href超文本引用 指向网络资源所在位置 建立当前元素锚点 或者当前文档之间的链接
11.使用原生js绑定两个点击事件
let btn1 = document,getElementById('btn1')
btn1.addEventListener('click',()=>{alert('hello1')})
btn2.addEventListener('click',()=>{alert('hello2')})
12.在js中如何比较两个对象
使用 == 或 === 对两个不同的却具有相同属性性及属性值的对象进行比较 他们的结果却不相等 因为比较的是他们的索引地址(内存地址) 而不是基本类型
13.js中的作用域 预解析与变量声明提升
作用域就是变量的有效范围 在一定的空间里可以对数据进行读写操作 这个空间就是数据的作用域
全局作用域: 最外层的函数定义的变量拥有全局作用域 即对任何内部函数来说 都是可以来访问的
局部作用域: 局部作用域一般只有在固定的代码片段中可以访问 对于函数外部是无法访问的
块级作用域: 凡是代码块就可以划分的变量的作用域 ,这种作用域就是块级作用域
预解析 把变量声明提升到当前作用域的最前面 只会提升声明 不会提升赋值 把函数声明提升到当前作用域的最前面 只会提升声明 不会提升调用 先提升let 在提升function
14.什么是作用域链 如何延长作用域链
当代码在一个环境中执行 会创建变量对象的一个作用域链 由子级作用域返回父级作用域中寻找变量 叫做作用域链
延长作用域链 执行环境的类型只有两种 全局和局部,但是有些语句可以在作用域链的前端临时增加一个变量对象 该变量对象会在代码执行后被移除 在执行这两个语句的时候 作用域链都会加强 try-catch 语句的catch块 会创建一个新的变量对象 会抛出一个错误对象的声明 with语句 会指定对象添加到作用域链中
15.js变量存储的方式区分为那些类型 其特点是什么
值类型和引用类型 值类型储存的值 赋值后原变量的值不变 引用类型储存的是地址 赋值之后是把原变量的引用地址赋值给新变量 新变量改变原来的会跟着改变