美文网首页
JS值类型和引用类型

JS值类型和引用类型

作者: silly鸿 | 来源:发表于2020-05-31 22:58 被阅读0次

1.值类型(基本数据类型)

string
number
boolean
null
undefined
symbol: 唯一值(字符串key)
bigint:大范围的整数值

值类型是存储在栈(stack)中的简单数据,存储在变量处的就是指

2.引用类型

Object
Set(新增 Set.prototype.__proto__ === Object.prototype)
Map(新增 Map.prototype.__proto__ === Object.prototype)
Array
Function
RegExp
Date

其实array和function是object的子类
存储在堆(heap)中的对象,也就是说,存储在变量处的是一个指针,指向存储对象的内存

3.值类型和引用类型的赋值

3.1值类型赋值,直接将值复制一份
var num1 = 10
var num2 = num1

在内存中的体现:


image.png
3.2引用类型赋值,是将地址复制一份,最后指向同一个对象
var p = {name:"张三", age:19};
var p1 = p;

在内存的体现:


4.值传递和引用传递

JS的基本类型是值传递的,意思就是一个基本数据类型的变量赋值给一个变量,传递的是存储在变量中的值;修改其中的一个值,不会影响另外一个
对于复杂数据类型是引用传递,意思就是一个复杂数据类型的变量赋值给另外一个变量,传递的是存储在变量中的地址,两者同时指向同一块内存,修改其中一个的值会影响另外一个

5.引出var、let、const

使用var声明的变量,其作用域为该语句所在的函数中,且存在变量提升现象
使用let声明的变量,其作用域为该语句的代码块内,不存在变量提升
使用const声明的常量,在后面出现的代码中不能再修改该常量的值

let的出现解决了
1.JS没有块级作用域的问题
2.解决循环体内的回调问题

6.判断js数据类型的4中方法

1. typeof
2. instanceof
3. constructor
4. toString

typeof

typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等。

  • 对于基本类型,除 null 以外,均可以返回正确的结果。
  • 对于引用类型,除 function 以外,一律返回 object 类型
typeof ''; // string 有效
typeof 1; // number 有效
typeof Symbol(); // symbol 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof null; //object 无效
typeof [] ; //object 无效
typeof new Function(); // function 有效
typeof new Date(); //object 无效
typeof new RegExp(); //object 无效

instanceof

  • instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型;
  • instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型

constructor

当一个函数 F被定义时,JS引擎会为F添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 F 的引用。如下所示:


849589-20170508125250566-1896556617.png

当执行 var f = new F() 时,F 被当成了构造函数,f 是F的实例对象,此时 F 原型上的 constructor 传递到了 f 上,因此 f.constructor == F


849589-20170508125714941-1649387639.png

toString

toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型
对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

Object.prototype.toString.call('') ;   // [object String]
Object.prototype.toString.call(1) ;    // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用

参考连接: 判断JS数据类型的四种方法

相关文章

  • js变量的类型和计算

    js变量类型:值类型和引用类型值类型:number,string,boolean,undefined,symbol...

  • js基本类型与引用类型

    1.js基本类型和引用类型 首先js的变量有两种类型,基本类型值和引用类型值 基本数据类型:null,undefi...

  • [JavaScript] F.prototype=1

    js是区分引用类型和值类型的值类型:数值,布尔值,null,undefined引用类型:对象,数组,函数 (1)如...

  • 引用类型和对象拷贝

    一、引用类型有哪些?非引用类型有哪些 JS 中分基本类型和引用类型。 基本类型值(数值、布尔值、字符串、null和...

  • JS 基础知识巩固(JS面试宝典-全面透彻)

    第一章:JS 基础上篇(js 类型) 值类型 引用类型 问题:为什么对值类型和引用类型进行修改会出现不同的结果呢?...

  • JS中实现浅拷贝和深拷贝

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中...

  • JS基础知识 (一)--变量类型和计算

    变量类型 js变量类型分为基本类型(或者叫值类型)和引用类型。(按照存储方式区分)• 值类型值类型:Number、...

  • JS基本类型和引用类型

    JS中可以把变量分成两部分,基本类型和引用类型。 JavaScript值类型和引用类型有哪些(1)值类型:数值、布...

  • 深浅拷贝

    JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会进...

  • JS值类型和引用类型

    1.值类型(基本数据类型) 值类型是存储在栈(stack)中的简单数据,存储在变量处的就是指 2.引用类型 其实a...

网友评论

      本文标题:JS值类型和引用类型

      本文链接:https://www.haomeiwen.com/subject/xnewfftx.html