JavaScript面试题15道
1、JavaScript中数据类型有几种?
在JavaScript中数据类型分2种,分别是简单数据类型和复杂数据类型。
简单数据类型有:undefined,null,number,string,布尔值。
复杂数据类型有:object,array,function,data等
2、在JavaScript中简单数据类型和复杂数据类型在内存中是如何存储的?
简单数据类型:当我们声明一个简单数据类型的变量a时,栈里面会开辟一块新的存储空间,用来存放变量名和值。当这个变量的值发生改变时,栈空间里的对应那块内存的值也会发生变量。如果把这个a赋值给b的时候,栈会另外开辟一块空间给b存储数据。
复杂数据类型:当我们声明一个复杂数据类型的变量ar时,栈里面会开辟一块新的存储空间,而变量的值存在堆内存,在栈内存中会提供一个引用地址指向堆内存。所以把ar赋值给br的时候,br得到的只是栈中指向堆内存的地址,在堆内存中并没有开辟新空间用来存值。因此在对br进行修改时,ar的数据也会变化。
3、JavaScript中获取对象中原型的方法。
第一种:object.prototypeof(实例化对象变量名)方法
Class Person{}
Let p1=new Person()
Object.getprototypeof(p1)==Person.prototype
第二种:__proto__
Class Person{}
Let p1=new Person()
p1.__proto__==Person.prototype
第三种:constructor.prototype
Class Person{}
Let p1=new Person()
p1.constructor.prototype==Person.prototype
4、JavaScript种创建对象的方法
Js种创建对象的方法有4种
- 直接创建
Var student={
Name:“王一”,
Age:18
}
- 工厂模式
Function Student(name,age){
Var s=new object()
S.name=name
s.age=age
s.eat=function(){
Console.log(this.name+”正在写作业。”)
return s
}
Var s1=Student(“王一”,19)
。。。。。多个对象
- 构造函数,利用this的指向性
Function Student(name,age){
This.name=name
This.age=age
This.eat=function(){
Console.log(this.name+”正在写作业。”)
}
Var s1=new Student(“王一”,19)
- 原型创建,利用prototype进行
Function Student(name,age){
This.name=name
This.age=age
}
Student.prototype.eat=function(){
Console.log(this.name+”正在写作业。”)
}
Var s1=new Student(“王一”,20)
S1.eat
5、JavaScript中浅拷贝和深拷贝的区别
浅拷贝:拷贝后,修改拷贝后的对象,会影响拷贝前的对象。
深拷贝:拷贝后,修改拷贝后的对象,不会影响拷贝前的对象。
浅拷贝是拷贝一层,深层次的对象级别就拷贝引用。深拷贝是拷贝多层,每一个级别的数据都会拷贝出来。
6、如何判断对象是从构造函数创建出来的
使用:isPrototypeof()方法。格式:定义的对象名.prototype.isPrototypeof(实例化对象名)
function Student(name,age){
this.name=name
this.age=age
}
Student.prototype.eat=function (){
console.log(this.name+"吃东西!")
}
function Teacher(name,age){
this.name=name
this.age=age
}
var s1=new Student("王一",19)
var t1=new Teacher("刘老师",22)
s1.eat()
console.log(Student.prototype.isPrototypeOf(t1)) //false
console.log(Teacher.prototype.isPrototypeOf(t1)) //true
7、如何判断对象的属性或方法是否属于构造函数内部
用hasOwnProperty()
结果
8、封装一个方法 传入 一个对象 key,判断这个key是否属于对象的原型上,返回布尔值 怎么判断基于原型?
function hasProtoType(obj,key){
if(key in obj){
// 判断是否在构造函数里
if(obj.hasOwnProperty(key)){
return false
}else{
return true
}
}else{
// key不在obj中
return false
}
}
var r1=hasProtoType(s1,"aaa")
console.log(r1)
9、JavaScript的继承性的实现方式有几种
共三种:1、原型链继承法,2冒充继承法,3、原型链+冒充组合继承法
10、JavaScript中this的指向性怎么改变
利用call和apply方法实现。
11、下面两段程序的运行结果是什么?同时说明原因。
第一段
function aaa(){
alert(a);
var a=20;
}
aaa();
第二段
var a=10;
function aaa(){
alert(a);
var a=20;
}
aaa()
两段程序的运行结果都是undefined。这是因为第一定义的var变量查找遵循就近原则;第二点,JavaScript中变量的声明被提前到作用域顶部,赋值保留在原地。
12、什么是闭包,为什么要用它?
闭包是指由权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。
闭包有两个常用的用途
- 使我们在函数外部能访问到函数内部变量。通过闭包函数,我们可以通过在外部的函数调用闭包函数,从而实现外部访问到函数内部变量,可以用这种方法来创建私有变量。
- 另一个用途是使已经运行结束的函数上下文中的变量对象继承留在内存中,因为闭包函数保留了这些变量对象的引用,所以这个变量对象不会被回收。
其实闭包的本质就是作用域链的一个特殊应用。
13、JavaScript的作用域链?
作用域链的作用是保证对执行环境有权访问的所有变量和函数有序访问,通过作用域链,我们可以访问到外层环境的变量和函数。
作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是全局对象)始终是作用域链的最后一个对象。
当我们查找一个变量时,如果当前执行环境中没有找到,我们可以沿着作用域链向后查找。
作用域链的创建过程跟执行上下文的建立有关。
14、如何判断一个对象是否属于某个类?
使用instanceof方法来判断。
运行结果:
15、new操作符具体干了什么呢?
第一、首先创建一个新的空对象,
第二、设置原型,讲对象的原型设置为函数的prototype对象,
第三、让函数的this指向这个对象,执行构造函数的代码(对这个新对象添加属性)
第四、判断函数的返回值类型,如果是指类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。
16、JavaScript中,有一个函数在执行时,对象查找时永远不会去查找原型。这个函数是?
这个函数是hasOwnProperty。这个方法可以用来检测一个对象是否含有特定的自身(构造函数)属性,该方法会忽略掉从原型链上继承到的属性。
JavaScript面试题15道相关推荐
- mysql笔试题15道
(93条消息) mysql笔试题18道_bubbleJessica的博客-CSDN博客 19.列出最低薪资大于1500的各种工作及从事此工作的全部雇员人数 SELECT JOB,COUNT(*) FR ...
- 占用系统资源测试_高频性能测试面试题15道
1.解释常用的性能指标名称与具体含义 性能测试 通过测试工具模拟多种正常.峰值及异常负载条件来对系统的各项性能指标进行测试.验证软件系统是否能够达到用户提出的性能指标,发现系统中存在的性能瓶颈并加以优 ...
- 看完这几道 JavaScript 面试题,让你与考官对答如流(中)
作者:Mark A 译者:前端小智 来源:dev 由于篇幅过长,我将此系列分成上中下三篇,上篇: 看完这几道 JavaScript 面试题,让你与考官对答如流(上) 26. 什么是IIFE,它的用途是 ...
- 174道 JavaScript 面试题,助你查漏补缺
最近在整理 JavaScript 的时候发现遇到了很多面试中常见的面试题,本部分主要是作者在 Github 等各大论坛收录的 JavaScript 相关知识和一些相关面试题时所做的笔记,分享这份总结给 ...
- 100 道 JavaScript 面试题及答案(下)
编辑整理 | 杨小爱 我们接上昨天的上篇内容<100 道 JavaScript 面试题及答案(上)>,今天我们开启下篇,把后面的50道题认真看完. 现在,我们就开始吧. 51. promi ...
- 100道JavaScript 面试题和答案(下)
英文 | https://betterprogramming.pub/100-javascript-interview-questions-58e22e30f7f1 翻译 | 杨小二 接上篇<1 ...
- 100 道 JavaScript 面试题及答案汇总(下)
英文 | https://betterprogramming.pub/100-javascript-interview-questions-58e22e30f7f1 翻译 | 杨小二 接上篇< ...
- 100道+ JavaScript 面试题,助你查漏补缺
来源 | https://github.com/Wscats/articles 最近在整理 JavaScript 的时候发现遇到了很多面试中常见的面试题,本文主要是在 Github 等各大论坛收录的 ...
- 【2022最新Java面试宝典】—— Tomcat面试题(15道含答案)
目录 1. Tomcat的缺省端口是多少,怎么修改? 2. tomcat 有哪几种Connector 运行模式(优化)? 3. Tomcat有几种部署方式? 4. tomcat容器是如何创建servl ...
最新文章
- centos 7 mysql图形界面_centos7-vnstat图形界面搭建
- java 队列复制_复制一个文件夹里的文件到另一个目录下 (使用队列的方法实现)...
- mac环境下配置gradle\maven
- python鸭制作类代码_Python实现多态、协议和鸭子类型的代码详解
- 七日杀a17服务器修改,七日杀a17作弊指令
- OpenCV学习(十四)之彩色图像RGB通道的分离、合并与显示
- 固高运动控制卡的使用 2 关于IO的访问以及调用(C#版)
- 【Unity3D】简单的鼠标打飞碟(Hit UFO)游戏
- Python链家广州二手房的数据爬取--数据爬取
- osgEarth基础入门
- vue获取token 实现token登录
- 怎样用计算机将二进制转换成十进制,二进制如何转换为十进制?
- iis7服务器发布网站,新手如何在服务器上用IIS部署网站
- 十分钟理解线性代数的本质_线性代数的本质
- 田忌赛马(贪心算法)
- AI智能尺寸测量仪简介(图像尺寸测量仪)
- 北京职工修改医保定点医院
- CC00010.hadoop——|HadoopImpala.V10|——|Impala.v10|集群实现|负载均衡.v01|
- 2021年美容师(初级)最新解析及美容师(初级)模拟考试题
- 广东省计算机二级c语言真题,广东省计算机二级考试题及答案