js基础面试题

数据类型

什么是引用类型,值类型?

  • 值类型key与value存储在栈中(量小)
  • 引用类型在栈存储的引用地址,在堆中存储是数据(量大)
  • 把引用类型赋值给一个变量,是吧变量的引用地址指向引用类型堆中地址

哪些值类型

  • String字符
  • Number数字
  • Boolean布尔
  • undefined未定义
  • null空(特殊)
  • Symbol符号

哪些引用类型

  • Object对象
  • Array数字
  • Function函数
  • Map图
  • Set集合

js判断数据类型

1. typeof

只能判断是否为值类型或者引用类型,引用类型除函数都返回的是object

2. instanceof

是不是某个对象的实例(是数组还是对象)

3. constructor

构造函数

4. isArray

Array.isArray() 数组专用,是否为数组

5. prototype.toString

最精准的判断数据类型

Object.prototype.toString.call()

Object对象,protype原型,toString转换为字符串,slice分割 从第8位到-1位

浅拷贝

只拷贝值类型,引用类型数据还是指向地址

  • 扩展{…obj}
  • for遍历
  • Object.assgin()
    把参数的两个对象进行合并,属性相同后面覆盖前面

深拷贝

  1. JSON.parse(JSON.stringify(数据))
    json数据类只支持 布尔,字符串,数字 null,undefined array object
    会忽略函数 等其他类型数据
  2. 通过判断类型 递归深拷贝
    递归就是函数调用自己
    一定要有结束条件

严格等于

===

判断类型和值是否都相对

应该在任何时候都使用 === 当判断是否为null或者为undefined可以为特例)

null === null true

==

判断隐式转换后的值

“100” == 100 // true
null == undefined //true
0 == false //true
特例:NaN === null // false
{} == {} // false
[] == {} //false
指向不同的内存地址

if判断

  • if()中判断的是否为truely变量
  • falsely变量:false “” 0 NaN undefined null
    两次取反 !!a得到结果为false
  • 除了falsely变量其他都为truely变量

逻辑且逻辑或

A||B

A为真(truely) 结果为A ,否则结果为B

A&&B

A为假(falsely) 结果为A,否则结果为B

判断对象

  • if(a&&a.b&&a.b.c){}
  • if(a?.b?.c){}
  • 如果有a并且有a.b并且有a.b.c
  • if(a.b.c){}

原型

原型与原型链有什么作用?

  1. 在js中实现继承
  2. 实现类的实现方法扩展
  • 准则
    不要修改js默认对象原型的方法
    尽量不要再js默认对象的原型上添加方法

什么是类,什么是实例

  • 类:是构造对象的一个模板
  • 实例:就是有类创建的对象
  • 本质上讲,类是个函数,实例是一个有函数创建的对象

什么是原型,什么是原型链

  • 每一个类(构造函数)都有一个显示原型prototype
  • 每一个实例,都有一个隐式原型_proto_
  • 类的prototype等于其实例的_proto_
原型链:

在这里插入图片描述

  • 查找对象实例的方法和属性时,先在自身找,找不到则沿着__proto__向上查找,__proto__形成的链条关系我们称为原型链(实现了js继承)

显与隐关系

类显示原型protype等于其创建的实例的隐式原型__proto__

var arr = [];
arr.proto === Array.prototype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试官询问JavaScript基础面试时,以下是一些常见的问和答案: 1. 什么是JavaScript? JavaScript是一种高级的、解释型的编程语言,用于在网页上实现交互和动态功能。 2. JavaScript的数据类型有哪些? JavaScript有七种数据类型:字符串(String)、数字(Number)、布尔值(Boolean)、对象(Object)、数组(Array)、空(Null)和未定义(Undefined)。 3. 如何声明变量? 使用关键字`var`、`let`或`const`来声明变量。例如: ``` var x = 5; let y = "Hello"; const z = true; ``` 4. JavaScript中的事件是什么? 事件是指用户在网页上执行的动作,如点击按钮、鼠标移动等。通过JavaScript可以捕捉并对这些事件做出响应。 5. 什么是闭包? 闭包是指函数能够访问并操作其外部函数作用域中的变量。它通过将内部函数返回或传递给其他函数来实现。 6. 什么是原型链? 原型链是JavaScript中实现继承的机制。每个对象都有一个原型对象,而原型对象又有自己的原型对象,形成一个链式结构。 7. 如何遍历数组? 可以使用循环结构(如`for`循环或`forEach`方法)来遍历数组中的每个元素。 8. 什么是AJAX? AJAX(Asynchronous JavaScript and XML)是一种用于在后台与服务器进行数据交互的技术。它可以在不刷新整个页面的情况下更新部分页面内容。 9. 如何处理异步编程? 可以使用回调函数、Promise对象或async/await来处理异步编程。这些方法可以确保在异步操作完成后执行相应的操作。 10. 什么是作用域? 作用域是指变量的可访问范围。JavaScript中有全局作用域和局部作用域(函数作用域和块级作用域)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值