js面试题

null 和 undefined的区别

Null表示了一个对象被定义了,但存放了空指针,转换为数值时为0
Undefined表示声明的变量未初始化,转换为数值时为NAN
typeof(null) — object typeof(undefined)—undefined

字符串转为数字的方法

通过parseInt(),可解析一个字符串,并返回一个整数,语法为parseInt(string,radix) String:被解析的字符串
Radix:表示要解析的数字的基数,默认是十进制,如果radix<2或radix>36,则放回NaN typeof(NaN) —
number

栈和堆的区别

栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量等
堆(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统释放

startWith:参数有3个,stringObj:要搜索的字符串对象,str:搜索的字符串,position:可选,从哪个位置开始搜索。如果以position开始的字符串以搜索字符串开头,则返回true,否则返回false
Indexof:可以返回某个字符串在字符中首次出现的位置

padStart() 方法从字符串的开头用另一个字符串填充一个字符串到一定长度,并返回一个达到一定长度的结果字符串。 padEnd()
方法用另一个字符串填充一个字符串到特定长度。但是,padEnd() 方法从字符串的末尾开始填充

按需加载

当用户触发了动作时才加载对应的功能。触发的动作,是要看具体的业务场景而言,包括但不限于以下几个情况:鼠标点击,输入文字,拉动滚动条,鼠标移动,窗口大小更改等。加载的文件,可以时js,图片,css,html等

暂停死区

在代码块内,使用let,const命令声明变量之前,该变量都是不可用的。在语法上,称为暂时性死区

数组去重

1、indexof循环去重 2、es6 set:Array.from(new Set(array))
3、object键值去重。把数组的值存成Object的key值,比如Object[value1]=true。在判断另一个值的时候,如果Object[value2]存在的话,就说明该值是重复的

数组常用的方法:push,pop,shift,unshift,splice,sort,reverse,map等

mouseover和mouseenter的区别

图片懒加载和图片预加载

预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染 懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数
两种技术的本质:两者的行为是相反的,一个是提前加载,一个是延迟甚至不加载
懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力

事件委托

是:不在事件的发生地(直接dom)上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素可以监听到子元素上事件的触发,通过判断事件发生元素dom的类型,来做出不同的响应
如ul>li,把li的事件通过ul添加

数据类型检测

(1)typeof:可以判断出string,number,boolean,undefined,symbol,function,bigint,但判
断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object'
(2)instanceof:可以判断一个实例是否属于某种类型,也可以判断一个实例是否是其父类型或者祖先
类型的实例
(3)constructor:除了undefined和null之外,其他类型都可以通过constructor来判断。但如果声明
了一个构造函数,并且改变了它的原型执行,这种情况下constructor也不能准确判断
(4)Object.prototype.toString:判断一个对象只属于某种内置类型,但不能准确判断一个实例是否属
于某种类型
(5)Array.isArray:判断是否为数组
优先级 运算符 顺序
1 小括号 ()
2 一元运算符 ++ – !
3 算数运算符 先 * / 后 + -
4 关系运算符 > >= < <=
5 相等运算符 === == == !=
6 逻辑运算符 先&& 后
7 赋值运算符 =
8 逗号运算符

1、变量:存储数据的容器
2、js:运行在客户端的浏览器编程语言。

作用:网页特效,表单验证,数据交互,服务端编程等 组成部分:
ecmascript:规定了js基础语法知识。比如:变量,分枝语句,循环语句,对象等等 web apis:
dom操作文档:比如对页面元素进行移动,添加删除等操作
bom操作浏览器:比如页面弹窗,检测窗口宽度,存储数据到浏览器等等

script标签:没有defer或者async属性,浏览器会立即加载并执行对应的脚本????补充两个文档情况
有async属性,表示后续文档的加载和渲染与js脚本的加载和执行是并行进行的,即异步执行【谁快谁执行】
有defer属性,加载后续文档的过程和js脚本的加载是并行的,js脚本的执行需要等文档所有元素解析完成之后【快的要等待】 js执行顺序:按html文档流顺序执行js代码(alert和prompt他们会跳过页面渲染先被执行)

3、变量名称规则与规范

规则:
不能用关键字:有特殊含义的字符,如let var if for
只能用下划线、字母、数字、$组成,且数字不能开头,字母严格区分大小写
规范:
起名要有意义
遵守小驼峰命名法,第一个单词首字母小写,后面每个单词首字母大写

5、表达式和语句的区别

表达式可被求值,所以它可以写在赋值语句的右侧
语句不一定有值,如alert for break等就不能被用于赋值

6、循环退出:continue , break 和return

break:退出循环
continue:结束本次循环,继续下次循环
while循环,退出循环体的方法:
循环条件不成立:
while( a>0); 当 a≤0 的时候,条件 a>0不成立
使用break:如while(1){if(b>5)break;}当 b>5 的时候,程序执行 break ,跳出 while 循环体,循环体被结束
使用return:如 while(1){if(c>8) return (XXX);},当 c>8的时候,程序执行; return,退出函数返回到上级函数

7、for与while的区别:

for:明确循环次数;
while不明确循环次数

8、js作用域:

全局作用域:函数外部或者整个script有效
局部作用域:也被称为函数作用域,函数内部有效
全局变量:

你可能感兴趣的:(javascript,前端,面试)