javaScript遇到的⾯试题1、JS的基本数据类型和引⽤数据类型有哪些,两者区别
基本数据类型->string、number、Boolean、null、undefined、symbol
引⽤数据类型->array、object、function
基本数据类型是保存在栈内存中,操作的是值,改变源数据不会影响新的变量
引⽤数据类型保存在堆内存中,操作的是地址,改变其中⼀个会影响另⼀个
2、数据类型中为假的有哪些?
fal (布尔型)
0(数值型)
null(定义空的或者不存在,现在没有,将来可能有)
kj
undefined(未定义,⼀直不存在)
NaN(不是⼀个有效数字)
we are young 歌词 空字符串(空字符串,字符类型)
3、举例JavaScript的基本规范,以及如何编写⾼性能代码
基本规范
1)代码缩进,建议使⽤“四个空格”缩进
2)语句结束使⽤分号
3)变量和函数在使⽤前进⾏声明
成人教育排名
4)以⼤写字母开头命名构造函数,全⼤写命名常量
5)使⽤ID最好先获取⼀下
6)规范定义JSON对象,补全双引号
1)遵循严格模式:"u strict";
2)将js脚本放在页⾯底部,加快渲染页⾯
3)尽量减少使⽤闭包
4)尽量使⽤直接量创建对象和数组
5)尽量减少对象成员嵌套
6)最⼩化重绘(repaint)和回流(reflow)
4、JS有哪些内置对象
Object、Array、Boolean、Number、String、Function、Arguments、Math、Date、RegExp
ES6新增对象:Symbol、Map、Set、Promis、Proxy
5、怎么实现string和number的相互转换
String 转换成 Number:Number()、parInt()、parFloat()
南洋理工大学 Number 转换成 String:String()、toString()
6、怎么创建、添加、替换、克隆、删除元素英文书写格式
英语祝福语创建-> ateElement('标签名')
添加-> parent.appendChild()
parent.inrtBefore(新插⼊的元素,⽼元素)
替换-> replaceChild(new,old)
克隆-> cloneChild()
删除->removeChild()
7、什么情况下会转为字符串
1)基于alert、confirm、document.write等输出内容时,会先把值转为字符串后在输出
2)基于'+'进⾏字符串拼接时
3)把复合类型值转换数字时候。⾸先会转换字符串然后再转为数字
4)给对象设置属性名时候,如果不是字符串 先转为字符串,然后在作为属性存储到对象中(对象属
性只能是字符串和数字) 5)⼿动调⽤toString、toFixed(将 Number 四舍五⼊为指定⼩数位数的数字)、join、String⽅法时候,也是为了转换字符串
8、获取对象属性[]和.的区别
.后⾯的是这个对象的属性,凡是⽤.的地⽅都可以⽤[]
[]中括号的内容可以是字符串也可以是变量,基本上[]放的是变量
9、null和undefined的区别
Null:代表空对象指针。现在没有,将来可能会有
undefined:空,未定义。现在没有,将来也不会有(Js中独有的数据类型)
10、检测数据类型的⼏种⽅式,以及他们的对⽐
typeof、instanceof、constructor、String.call()
typeof只针对基本数据类型,遇到引⽤数据类型是不起作⽤的(⽆法细分对象) instanceof⽤来判断对象和函数,不适合判断字符串和数字
constructor是Object其中的⼀个属性。默认指向实例的构造函数
通过String⽅法,判断某个对象值属于哪种内置类型
11、in 与 hasOwnProperty
两者都代表查看某个属性是不是⾃⼰的
in判断的是对象的所有属性,包括对象实例及其原型的属性
hasOwnProperty则是判断对象实例的是否具有某个属性
12、innerHTML和innerText区别
innerHTML可以获取结构和⽂本
innerText只获取⽂本内容
13、如何清除⼀个定时器?
clearTimeout(timer)
14、说⼀下倒计时原理及公式
未来时间-现在时间= 剩余时间
let d = Math.floor(t/86400); t % =86400;
let h = Math.floor(t/3600); t % = 3600;
let m = Math.floor(t/60); t % = 60;
15、何时使⽤ === 何时使⽤ ==
判断对象的属性是否存在可以使⽤双等,其余都⽤全等
===更严谨,不仅值相等类型也要相等,不⽤进⾏类型转换,并且⽐==速度快
16、eval 是做什么的?
它的功能是把对应的字符串解析成JS代码并运⾏
由JSON字符串转换为JSON对象的时候可以⽤ eval('('+ str +')');
中国翻译
应避免使⽤eval,因为不安全,耗性能
17、数组常⽤的⼀些⽅法有哪些
push()向数组末尾添加数据
pop()删除数组最后⼀项
unshift()向数组⾸位添加新内容
shift()删除数组的第⼀项
slice()按照条件查找出其中的部分内容
splice()对数组进⾏增删改
join()⽤指定的分隔符对数组拼接
concat()⽤于连接两个或多个数组
indexOf()/lastIndexOf()当前值在数组中第⼀次/最后⼀次出现的位置索引
oyama
includes()判断⼀个数组是否包含指定的值
sort()对数组进⾏排序
rever()把数组倒过来排列
forEach()循环遍历数组每⼀项
18、说⼀下什么是DOM映射机制
通过DOM中⽅法获取到的元素,与页⾯⼀⼀对应的这种关系称之为DOM映射
querySelectorAll获取到的元素集合没有DOM映射,必须是元素的内置属性发⽣变化,浏览器才能监听得到
19、⼀⾏代码实现数组去重
[...newSet([1,2,3,4])]
20、节点类型都有哪些,如何判断当前节点类型
1元素节点,2属性节点,3⽂本节点,8注释节点、9⽂档节点
通过deType判断节点类型,其中,nodeObject为节点对象
该属性返回以数字表⽰的节点类型,例如,元素节点返回1,属性节点返回2
21、重绘和回流(重排)区别,什么情况会触发重排和重绘
当页⾯元素(宽⾼,位置)发⽣改变,回导致页⾯重排,浏览器会根据新位置进⾏重新渲染
回流必将引起重绘,⽽重绘不⼀定会引起回流。重绘相对于回流性能消耗较低
任何改变⽤来构建渲染树的信息都会导致⼀次重排或重绘
⽐如添加、删除、更新DOM节点,通过display: none隐藏,调整样式属性,调整窗⼝⼤⼩,滚动等等
22、如何最⼩化重绘(repaint)和回流(reflow)
1)需要对元素进⾏复杂的操作时,可以先display:none隐藏,操作完再显⽰
2)需要创建多个DOM节点时,使⽤DocumentFragment创建完后⼀次性的加⼊document
3)尽量避免⽤table布局
4)避免使⽤css表达式(expression),每次调⽤都会重新计算值(包括加载页⾯)
5)尽量使⽤css简写,如:⽤border代替border-width,border-style, border-color
23、什么是⾃执⾏函数,⽤于什么场景
⾃执⾏函数,即定义和调⽤合为⼀体,⽐如匿名函数⾃执⾏
他可以创建⼀个独⽴作⽤域,防⽌作⽤域污染,防⽌变量影响到全局,以免产⽣冲突
专业辅导机构 多⽤于框架和插件
24、改变this指向的⽅法
call、apply、bind
call和apply可以⾃动执⾏,bind需要⼿动调⽤,返回值为函数
as2 call和bind都有⽆数个参数,apply只有两个参数,并且第⼆个为数组