JS面试题汇总(二)

1.原型和原型链

(1)原型

所有函数都有prototype属性,prototype在英语中就是“原型”的意思。prototype的属性值是一个对象,默认拥有constructor属性指回函数。

最重要的一点是:构造函数的prototype属性是它的实例的原型。

原型的作用有:

数据共享,节约内存空间;实现继承。

Class 的typeof 类型是函数;

原型分为隐式原型( __proto__ )和显式原型 (prototype );

原型关系:每class都有显式原型 prototype ,每个实例都有隐式原型__proto__ ;

实例的 __proto__ 指向对应 class 的 prototype 。

基本原型的执行规则:

获取属性或执行方法时,先寻找自身属性和方法,如果找不到则自动去__proto__中查找。

 (2)原型链

一个对象有原型对象,它的原型对象又有原型对象,一直向上找,找到object对象,object对象的原型对象为null,null是原型链的终点,再往上找没了。像链子一样的结构就是原型链。原型链的作用是:查找对象的属性或者方法。

2.undefined和null的区别

(1)undefined是基本数据类型

缺少值或者一个没有被赋值的变量的默认值是undefined,而undefined的类型也是undefined。

即:undefined又是值,又是一种类型,这种类型只有它自己。

注意:

typeof undefined = undefined;

转为数值为NaN;

应用场景:变量被声明但是没有赋值时为undefined;函数没有返回值时为undefined;对象的属性没有赋值时为undefined等。

(2)null也是基本数据类型

null表示“空”。

typeof null = null;

转为数值为0;

应用场景:是原型链的终点;作为函数的参数,表示参数不是对象

在“==”运算符中认为null与undefined相等;

在“===”运算符中认为null与undefined不相等。

3.== 与 === 运算符的区别

两种符号的定义:   

"==" 叫做相等运算符; "===" 叫做严格相等运算符(全等运算符)
它们之间的区别:
  "==" 允许隐式类型转换,只判断等号两边的值是否相等,而不判断类型是否相同。值相同则返回 true ;
  "===" 允许隐式类型转换,既要判断值是否相等,也要判断类型是否相同,即全等才能返回 true ;

“==”运算符认为null和undefined是相等的;

“===”运算符认为null和undefined是不相等的。

4.Truly变量、falsely变量和逻辑判断

Truly变量:!!a === true 的变量;

Falsely变量:!!a === false 的变量;

5. substring()、substr()和slice() 三种截取子字符串方法的区别

substring(a,b)和slice(a,b)都是截取从a到b结束(不包括b)的字串,他们的区别是:

substring(a,b)可以自动交换两个参数的位置,而slice(a,b)不行;

slice(a,b)的参数a可以是负数,但是substring(a,b)不行。

substr(a,b)中参数b是字串长度,而不是位置编号。

6.Instanceof 判断引用类型

用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。可以判断数组,对象等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值