我是靠谱客的博主 甜甜招牌,最近开发中收集的这篇文章主要介绍浅谈 var bool= false 和 var bool= new Boolean(false)的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前段时间再掘金上看到一个很热门的话题,看代码。

var bool = new Boolean(false);
if(bool){
    console.log('javaScript is amazing!');
}

复制代码

你觉得运行的结果是什么呢?

毫无疑问输出的结果应该是 “javaScript is amazing!”;为什么呢?

其实这个地方很简单,因为bool返回的是一个对象,他是一个引用,我们单纯的if(bool)是判断的是这个对象引用是否存在,而不是拿着这个bool对象引用的值进行判断,如果我们改成if(bool.valueOf())那么肯定就不一样了。

那你肯定会很疑惑为什么?这两种写法的区别是什么?

var bool = false;
if(bool){
    console.log('javaScript is amazing!');
}
var boolObj = new Boolean(false);
if(boolObj){
     console.log('javaScript is amazing!');
}
复制代码

那么接下来我们一起看看吧。

Primitive value VS Reference value

Primitive value(原始值)Reference value(引用值),在JavaScript中我们变量(variable)可以被存储为两种值类型,分别为原始值,引用值。

Primitive value

  1. 原始值是存储在 (Stack)上的数据 [Data]
  2. 原始值直接存储在变量访问的位置。

原始类型(基本类型):Undefined,Null,Boolean,Number,String,Symbol(ES6)

Reference value

  1. 引用值是存储在(Heap)中的对象 [Object]
  2. 引用值是一个指向该对象被存储在存储器中位置的值。

对象是一个属性的集合,一个属性可以是引用一个对象或原始值,原始值没有属性。

除了null和undefined类型,其他的原始值都有他对应的对象包装物(即包装对象),例如 string 对应 new String(),boolean 对应 new Boolean() ,但是primitive都是不可变的。

当JavaScript中遇到对string这类基本类型值进行属性访问或方法调用时,会调用new 相应的包装对象,将基本类型值封装成一个对象,

例子:

var str = 'aaa';
str.name = 'string1';
//JavaScript会对str执行new String(str)方法,返回一个临时的对象,在调用方法或属性结束后销毁此对象。
str.length // 3  
str.name //undefined   基本类型是不包含属性的。
复制代码

Note:str变量所表示的永远是primitive的字符串,而不会因为在调用length属性进行了一次临时包装而发生变化。

Primitive Value存储在栈中,Reference value存储在堆中

简单总结Heap(堆)和Stack(栈)的区别

  1. Stack的空间是由操作系统自动分配和释放的,Heap的空间是由使用者自动申请和释放的。
  2. 栈的空间有限,堆的空间是无限的自由区。
  3. 栈是用来存 ,堆是用来存 引用
  4. 在JS中申明的变量是原始值(Primitive value),则存储在栈中,如果是引用值(Reference value)则存储在堆中。

举例:

// var 变量名 = '';这样定义的东西在栈区
var str = 'aaa';  //只在栈内存中分配空间
//new 数据类型();  这样定义的东西就在堆区
var strObj = new String('aaa'); //则在堆内存中分配空间

复制代码

转载于:https://juejin.im/post/5af6feec51882542682e4a29

最后

以上就是甜甜招牌为你收集整理的浅谈 var bool= false 和 var bool= new Boolean(false)的区别的全部内容,希望文章能够帮你解决浅谈 var bool= false 和 var bool= new Boolean(false)的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部