js面试题

1、js 数据类型有哪些?
js 数据类型⼀共有 8 种,分为两⼤类:基本类型和引⽤类型。
它们的数据类型分别为:
基本类型:string、number、boolean、null、undefined、symbol、bigint
引⽤类型:object

2、null 和 undefined 的区别。
null 和 undefined 两个都表⽰⽆的值。
作者设计 js 的时候,借鉴的 java 语⾔先设计的 null 。null 使⽤的时候会被隐式转化成 0,不容易发现错误。
console.log( number(null) ) //0
undefined 是为了填补 null 的坑。所以后来⼜新增了 undefined 。
console.log( number(undefined) ) //NaN
3、new 操作符具体做了什么?
创建了⼀个空对象。
将空对象的原型指向于构造函数的原型。
将空对象作为构造函数的上下⽂。
对构造函数有返回值的处理判断。
实现 new 操作符的⽅法:
function create( fn,...args ){
var obj={}
 Object.setPrototypeOf( obj,fn.prototype )
var resault = fn.apply(obj,args)
return (resault instanceof Object) ? result : obj
}


4、== 和 === 有什么不同?
== ⽐较的是值,=== 除了⽐较值,还⽐较类型。
console.log( [1,2]=='1,2'  )       // true
console.log( [1,2] === '1,2'  )  //false
valueOf ⽅法返回 Math 对象的原始值,通常由 javascript 在后台⾃动调⽤,并不显⽰的出现在代码中。
console.log([1,2].valueOf()) //[1,2]
console.log('1,2'.valueOf()) //[1,2]
// 所以
console.log( [1,2]=='1,2'  )  // true
不管是字符串和数字⽐较,还是布尔值和数字⽐较,都会使⽤ valueOf 隐式转换。
总结:== 需要使⽤ valueOf() 进⾏隐式转换,所以性能差。 === 会避开⼀些不必要的⿇烦。
 

5、this 的指向

var name = 'window name'
var p1 = {
 name:'p1 name',
 showName:function(){
  console.info(this.name)
 }
}
var fn = p1.showName
fn()
p1.showName()
var p2 = {
 name:'p2 name',
 showName:function(fun){
  fun()
 }

}
p2.showName(p1.showName)
p2.showName = p1.showName
p2.showName()

/*
运⾏结果:
window name
 p1 name
 window name
  p2 name

*/
这是⼀道关于 this 指向的⾯试题,接下来我们就说说 this 是如何指向的?
this 对象是运⾏时基于函数的执⾏环境绑定的:

在全局函数中,this 等于 window 。
函数上下⽂调⽤,严格模式下 this 为 undefined ,⾮严格模式下,this 指向 window 。
当函数被作为某个对象的⽅法被调⽤时,this 等于那个对象。如果使⽤ call apply 改变当前 this 时,将会指向为传递过来的那个 this 。
匿名函数的执⾏环境具有全局性,因此 this 指向 window。
构造函数内的 this 指向创建的实例对象。
dom 事件处理函数,this 指向触发该事件的元素。
setTimeout 和 setInterval 中的 this 指向全局变量 window

 

6、let、var 和 const 的区别

let/const 声明并不会被提升到当前代码块的顶部,因此你需要手动将 let/const 声明放置到顶部,
以便让变量在整个代码块内部可用。
块级作用域:1、在一个函数内部;2、在一个代码块(由一对花括号包裹)内部
禁止重复声明
var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

7、同源策略

同源策略是浏览器最核心也最基本的安全功能,是禁止浏览器跨域请求数据,目的是保护信息安全。
域名、协议、端口号

8、GET 和 POST 的区别

1、get请求是获取数据的,而post请求是提交数据的。
2、get请求能被缓存,post请求不能被缓存
3、get请求对数据长度的限制;当发送数据时,GET 方法向 URL 添加数据get请求的传送数据会拼接在url后面
4、GET在浏览器回退时是无害的,而POST会再次提交请求。
5、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
6、GET参数通过URL传递,POST放在Request body中。

9、

说说Javascript中的继承,如何实现继承?
继承是什么:

继承(inheritance)是面向对象软件技术当中的一个概念;如果一个类别B“继承自”另一个类别A,就把这个B称为“A的子类”,而把A称为“B的父类别”也可以称“A是B的超类”;

继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码
在子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能
实现继承的方法:

原型链继承
构造函数继承(借助 call)
组合继承
原型式继承
寄生式继承
寄生组合式继承
 

10、Javascript数组常见的方法有哪些?
操作方法

增:push()、unshift()、splice()、concat()
删:pop()、shift()、splice()、slice()
改:splice()
查:indexOf()、includes()、find()
排序方法

数组本身有两个方法:reverse()、sort()
定义排序函数:冒泡排序、插入排序、递并排序、计数排序
转换方法:

  • join()

迭代方法:

  • some()
  • every()
  • forEach()
  • filter()
  • map()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值