我是靠谱客的博主 精明斑马,最近开发中收集的这篇文章主要介绍js基础面试40题37. 写一个正则表达式:判断字符串以字母开头,后面可以是数字,下划线,字母,长度为 6 ~30,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 请详细介绍 JavaScript 的基本数据类型

Number - - (数字)
String - - (字符串)
Boolean - - (布尔值)
Undefined - - (未定义)
Null - - (空的)
object

2. BOM 和 DOM

Browser Object Model 浏览器对象模型,js封装好的用来操作浏览器的一个对象模型,BOM的顶级对象是window。
Document Object Model 文档对象模型,定义了表示和修改文档所需的对象、行为和属性,以及这些对象之间的关系
DOM是ECMAScript来操作页面元素的一种工具
DOM的核心对象是document

3. === 、==、=的区别

=代表赋值, == 代表相同,=== 代表严格相同(数据类型与值相同)

4. ===与!==的区别

= = =如果类型不同,就一定不相等
!== 不同类型不比较,且无结果,同类型才比较

5. 设 a=5;求“ b=a++;c=++b;”,b 和 c 输出的结果

		a = 5;
        b = a++;
        c = ++b;
        console.log(b);
        console.log(c);
        b=6;
        c=6;

6. 设 a=5,求“b=a++ + (a<5)”b 输出的结果

		a = 5;
        b = a++ + (a < 5);
        console.log(b);
        b = 5;

7. 请详细说明数据在 js 中如何将字符串转为数字类型。

parseInt()整数
parseFloat()浮点数
Number(value)——把给定的值转换成数字

8. 请说明””,null,undefined 的区别

"“空字符串
null 表示一个对象被定义了, 值为"空值”;
undefined:是一个表示“无”的原始值或者说表示“缺少值”,就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined;

9. 判断 js 类型的方式

typeof方法 typeof 1

10. 请介绍 break,continue,return 的作用

一、作用不同

1、break:执行break操作bai,跳出所在的当前整个循du环,到外层代码继续执行。

2、continue:执行continue操作,跳出本次循环,从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。

3、return:执行return操作,直接返zhi函数,所有该函数体内的代码(包括循环体)都不会再执行。

二、结束不同

1、break:break不仅可以结束其所在的循环,还可结束其外层循环,但一次只能结束一种循环。

2、continue:continue结束的是本次循环,将接着开始下一次循环。

3、return:return同时结束其所在的循环和其外层循环。

11. 请介绍函数的参数有哪些?作用都是什么?使用时有什么注意项

1.形参相当于变量,因而实参可以存放任何数据类型:数字,字符串,布尔值,函数,对象,未定义等。参数可以有多个,参数之间用,隔开。
2.函数的封装:由顺序,选择和循环三种基本结构组成。
3.函数封装注意事项:
(1)尽量保证html代码结构一致
(2)需要把核心程序实现,再用函数包裹起来
(3)把每组不同的值找出来,通过传参分别实现效果
(4)运算符号不能作参数传递,只能在函数内部通过判断的形式分别执行

12. 什么是预解析?

预解析:JS代码在执行之前,会对代码进行预解析,寻找作用域中的var 和function ,然后对其进行事先声明,在从上到下执行代码。这就是一个预解析的过程。

13. 对象的组成部分有哪些

属性和方法

14. 请详细介绍堆和栈的区别

1、堆栈空间bai分配

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

2、堆栈缓存方式

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

3、效率比较

栈由系统自动分配,速度较快。但程序员是无法控制的。

堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。

4、存储内容

栈: 在函数调用时,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续运行。

堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。

15. 请介绍一下 JS 的作用域

全局作用域,函数作用域

16. 什么是 window 对象什么是 document 对象

一、bai指代不同

1、document对象:代表du给定浏览zhi器窗口中的dao HTML 文档。

2、window对象:表示浏zhuan览器中打开的窗口shu。

二、作用不同

1、document对象:使用 document 对象可以对 HTML 文档进行检查、修改或添加内容,并处理该文档内部的事件。

2、window对象:浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

17. 什么是事件冒泡,如何阻止事件冒泡

在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

阻止事件冒泡的方法:
event.stopPropagation();
returnfalse;

18. attribute 和 property 的区别

property是DOM中的属性,是JavaScript里的对象;
attribute是HTML标签上的特性,它的值只能够是字符串;

19. 创建对象有哪些方式

new 操作符 + Object 创建对象
字面式创建对象
构造函数模式

20. 说说什么是 OOP,以及 OOP 的三大特征

OOP:面向对象
三大特征:封装,继承,多态

21. JS 中实现继承的方式

call()方法
apply()方法
原型链方式

22. 事件委托是什么

事件委托就是把原本需要绑定的事件委托给父元素,让父元素负责事件监听。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能

23. 闭包是什么,有什么特性,对页面有什么影响

什么是闭包

“官方”的解释:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函 数),因而这些变量也是该表达式的一部分。 在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、 JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同 程度的支持。 通俗的讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。

闭包的特性:

①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外 界提供访问接口;

②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调 用之后,闭包结构依然保存在;

对页面的影响:

使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。

24. “DOM 事件流”的三个阶段

捕获阶段:事件从Document节点自上而下向目标节点传播的阶段;

目标阶段:真正的目标节点正在处理事件的阶段;

冒泡阶段:事件从目标节点自上而下向Document节点传播的阶段。

25. js 延迟加载的方式有哪些

1.defer 属性
2.async 属性
3.动态创建DOM方式
4.使用jQuery的getScript方法
5.使用setTimeout延迟方法
6.让JS最后加载

26. .call()和.apply()之间有什么区别

apply()方法

apply方法是应用某一对象的一个方法,用另一个对象替换当前对象;

语法 apply(thisObject,Array) 两个参数

参数 thisObject 可选项 将被用作当前对象的对象;

Array 可选项 将被传递给该函数的参数数组;

call()方法
call和apply用法一致,只是其参数列表不同,换句话说就是在使用call()方法时,传递给函数的参数必须逐个例举出来。

语法:function.call(obj,[参数1[,参数2[,参数3…[,参数n]]]])

obj:指这个对象将代替function类里的this对象;

参数:指一个参数列表

27. 常见的容易引起内存泄漏的情况有哪些?

setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
使用闭包过多会引起内存泄漏

28. new 操作符具体干了什么呢

1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

2、属性和方法被加入到 this 引用的对象中。

3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

29. this 的指向如何辨别

浏览器环境:无论是否在严格模式下,在全局执行环境中,this都指向全局对象window;
是否是new绑定:
如果是new绑定,并且构造函数中没有返回function或者是object,那么this指向的这个新对象。
函数是否通过call,apply调用,或者是用了bind绑定,如果是那么this绑定的就是制定的对象。

30. 同步和异步的区别有哪些

在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请bai求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

31. 什么是对象原型

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

32. 构造函数和对象原型及实例之间的关系是怎样的

实例可以通过内部指针访问到原型对象,原型对象可以通过constructor找到构造函数。

33. 什么是静态成员,什么是实例成员

实例成员:由构造函数创建出来的对象能直接访问的属性和方法,包括:对象本身 以及原型中的所有的属性和方法。
静态成员:由构造函数直接访问到的属性和方法。大家注意是直接访问的属性和方法,间接获取就不是了。

34. 函数的调用方式有哪些?

方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式

35. let、const、var 的区别有哪些

1.const定义的变量不可以修改,而且必须初始化。
2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。

36. 在 Javascript 中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。
可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

37. 写一个正则表达式:判断字符串以字母开头,后面可以是数字,下划线,字母,长度为 6 ~30

var reg=/^[a-zA-Z]w{5,29}$/;

38. 解释 JavaScript 中定时器的工作原理?

Javascript 引擎是单线程的,致使异步事件的回调函数会被加入队列等待机会执行。
setTimeout 和 setInterval 在如何执行异步代码上有根本的区别
如果定时器(的回调函数)不能够被立即执行,那么它将被推迟到下次机会执行(这将大于它预期的延迟)
如果回调函数执行时间过长(长于定时器的延迟时间),“间隔定时器”有可能会一个接一个无间隔的执行

39. 使用冒泡排序对数组 list 进行从大到小排序

window.onload = function () {
            var list = [18, 9, 21, 47, 15, 23, 11];
            // 外层循环控制的是比较的轮数
            for (var i = 0; i < list.length - 1; i++) {
                // 内层循环是每一轮的两两比较
                for (var j = 0; j < list.length - i - 1; j++) {
                    if (list[j] < list[j + 1]) {
                        var temp = list[j];
                        list[j] = list[j + 1];
                        list[j + 1] = temp;
                    }
                }
            }
            console.log(list);
        }

40. 使用递归算法求出斐波那契数列第 14 位数

function fb(n) {
            if (n == 1 || n == 2) {
                return 1
            }

            return fb(n - 1) + fb(n - 2)
        }
        console.log(fb(14))//377

最后

以上就是精明斑马为你收集整理的js基础面试40题37. 写一个正则表达式:判断字符串以字母开头,后面可以是数字,下划线,字母,长度为 6 ~30的全部内容,希望文章能够帮你解决js基础面试40题37. 写一个正则表达式:判断字符串以字母开头,后面可以是数字,下划线,字母,长度为 6 ~30所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部