JS的一些知识点

1、介绍一下js的数据类型有哪些,值是如何存储的

JavaScript一共有8种数据类型,其中有7种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol(es6新增,表示独一无二的值)和BigInt(es10新增);

1种引用数据类型——Object(Object本质上是由一组无序的名值对组成的)。里面包含 function、Array、Date等。JavaScript不支持任何创建自定义类型的机制,而所有值最终都将是上述 8 种数据类型之一。

原始数据类型:直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。

引用数据类型:同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体

 

2、JS中数据类型的判断( typeof,instanceof,constructor,Object.prototype.toString.call()

(1)typeof对于原始类型来说,除了null都可以显示正确的类型。

    typeof对于对象来说,只有function能正确显示,其他都显示object。 

        所以,typeof并不能准确判断变量的类型,可以使用instanceof。

(2)instanceof能够正确判断类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的prototype。

  instanceof可以精准的判断引用类型(object array function),而基本数据类型不可以被instanceof精准判断。

(3)constructor利用全等可以判断全部数据类型。

1 console.log((2).constructor === Number); // true
2 console.log((true).constructor === Boolean); // true
3 console.log(('str').constructor === String); // true

 

  但是有一个坑,如果更改了一个对象的原型,它的constructor就会变得不可靠。

function Fn(){};
Fn.prototype=new Array();
var f=new Fn();
console.log(f.constructor===Fn);    // false
console.log(f.constructor===Array); // true

(4)Object.prototype.toString.call()使用 Object 对象的原型方法 toString ,使用 call 进行狸猫换太子,借用Object的 toString  方法。

1 var a = Object.prototype.toString;
2 console.log(a.call(2));
3 console.log(a.call(true));

 

 

3、null 和 undefined 的区别?

首先 Undefined 和 Null 都是基本数据类型,这两个基本数据类型分别都只有一个值,就是 undefined 和 null。

undefined 代表的含义是未定义, null 代表的含义是空对象(其实不是真的对象,请看下面的注意!)。一般变量声明了但还没有定义的时候会返回 undefined,null 主要用于赋值给一些可能会返回对象的变量,作为初始化。

当我们对两种类型使用 typeof 进行判断的时候,Null 类型化会返回 “object”,这是一个历史遗留的问题。当我们使用双等 号对两种类型的值进行比较时会返回 true,使用三个等号时会返回 false。

 

4、 对this、call、apply和bind的理解

  1. 在浏览器里,在全局范围内this 指向window对象;

  2. 在函数中,this永远指向最后调用他的那个对象;

  3. 构造函数中,this指向new出来的那个新的对象;

  4. call、apply、bind中的this被强绑定在指定的那个对象上;

  5. 箭头函数中this比较特殊,箭头函数this为父作用域的this,不是调用时的this.要知道前四种方式,都是调用时确定,也就是动态的,而箭头函数的this指向是静态的,声明的时候就确定了下来;

  6. apply、call、bind都是js给函数内置的一些API,调用他们可以为函数指定this的执行,同时也可以传参。

 

posted @ 2020-07-04 10:31  风中告退  阅读(141)  评论(0编辑  收藏  举报