JS基础面试题

数据类型

引用类型,值类型?

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

值类型

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

引用类型

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

怎么判断数据类型

  • typeof类型

适合判断值了与引用类型不能判断具体引用类型
typeof "abc” string
typeof 123 number
typeof true boolean
typeof undefined undefined
typeof null object
typeof Symbol()
symboltypeof object
typeof 0]object
typeof function()function
typeof new Map() object
typeof new Set() object

  • constructor构造函数

判断实例对象构造函数
[   ].constructor === Array true

  • Array.isArray)是否为数组
  • Object.prototype.toString.callobj)原型

Object.prototype.toString.call(obj).slice(8,-1)返回数据的精确类型

  • instanceof实例

[  ]instanceof Array true
[  ]instanceof Object true
{  }instanceof Array false
{  }instanceof Object true

浅拷贝

  • Object.assign(A,B)
  • for in遍历拷1贝
  • {...A}对象扩展 

var obj1 = {name:"白菜头子",age:20,friend:["大白菜","小白菜",{name:"中白菜",job:"程序员"}],say(){alert("你好我是"+this.name)}}
//案例
var obj3={};
for (var k in obj1){
    obj3[k]=obj1[k]
}
var obj4=Object.assign(obj1,{})

var obj2={...obj1}

 深拷贝

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

转字符串   

var obj2 = JSON.parse(JSON.stringify(obj1))

 递归

function deeCopy(obj){

    if(typeof obj==="object"&&obj!==null){

      var result;

      if(obj.instanceof Array){

         result = [];

         for(var i=0;i<obj.length;i++){

               result[i] = deepCopy(obj[i])

         }

      }else{

         result = {};

         for(var k in obj){

             result[k] = deepCopy(obj[k])

         }

      }

      return result;

    }else {

        return obj;

    }

}

隐式转换

数据类型转换:强制转换隐式转换强制转换

Number()转换为数字string() 转换为字符串 BooLean()转换为布尔值隐转换符号
+字符串连接符号(隐式转换为字符串) + -*/数学运算(隐式转换为数字)><>=<=/ / && !比较与逻辑(隐式转换为布尔值)

  • 字符串和任意数据+连接都会转换为字符串
  • 数学运算符号会会尝试隐式转换数据为数字
    如果数据没有转换数字成功结果就是NaN(not a num的检测)l / true转换为数字默认 转换为1false默认会转换为0
    / / alert( ! !a);//false
  • 逻辑与比较运算符号会把变量转换为布尔值
    空字符串,0, nuL4L, undefined NaN false才会被转换为false,其他都会被转换 为true/把以上的变量值称为fLasely变量值,其他的变量都称为truely变量值
    alert( ! ! -1); //true

全等【  === 】

判断类型和值是否相同

注:判断是否为null或者为undefined为特例(其他为fasle)

null === null

undefined === undefined

结果:true

等于【  == 】

判断值是否相同

案例:

“100” == 100 // true
null == undefined //true
0 == false //true

注:NaN === null // false

特殊:

[] == {} //false

{} == {} // false

因为里边指向不同的内存地址

if判断

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

逻辑且逻辑或

逻辑 或 ||

前||后

若前边的为true返回前边的值,反之返回后边的值

逻辑 且 &&

前&&后

前边为true结果返回后面的值,反之返回前边的值

判断对象

if(a&&a.b&&a.b.c){ }
if(a?.b?.c){ }
如果有a并且有a.b并且有a.b.c
if(a.b.c){ } 这样写是错误的

原型和原型链

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

每个构造函数(class)都有一个显示的原型prototype

每个实例对象都有个隐示原型__proto__

实例的隐式原型__proto__等于其构造函数的显示原型prototype

当查找一个对象的属性或方法时先在实例上查找,找不到沿着__proto__向上逐级查找

我们把__proto__的__proto__形成的链条关系成为原型链

作用:1 原型链实现了js继承,2.原型可以给构造函数创建的实例添加公用方法

作用

  • 实现了js的继承
  • 实现了实例的公用属性和方法

例如:

var arr=[ ]

arr.__proto__===Array.prototpe

Array.prototpe.__proto__===Object.prototpe

Object.prototpe===arr.__proto__.__proto__

注:相当于形成一个链子,一环套一环,从arr的__proto__到Object的prototpe形成一个链条

js实现继承

class 的 extends方法
class Student extends People{
constructor(name,age,no){
//继承构造函数Student继承People里边的内容
super(name, age)

}

}

使用原型链

Stuent构造函数中继承

People

function Student(name,age,no){

People.call(this,name,age) 

}

继承原型链

Student.prototype = Object.create(People.prototype)

修正Student构造函数

Stuent.prototype.constructor = Student

原型链示图

 

  • 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、付费专栏及课程。

余额充值