美文网首页
数值类型 — 基本、引用

数值类型 — 基本、引用

作者: 糕糕AA | 来源:发表于2019-06-27 14:09 被阅读0次

null、undefined、boolean、number、string、symbol、object(array、function)

  • undefined:声明了,但未被赋值
  • null:曾经被赋值,现在没有值
  • NaN:计算失败得到的结果 NaN != NaN

基本数据类型:null、undefined、boolean、number、string、symbol

引用类型:object、array、function、data、正则、math

栈(stack)和堆(heap):stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放

区别:

  1. 声明变量时内存分配不同
  • 原始类型:存在栈中,占据固定空间
  • 引用类型:存在堆中,栈中存储的变量是引用地址。因为栈分配内存后就不会改变大小,而引用值的大小会改变,所以存储值不变的地址。
  1. 访问机制不同
  • 引用类型按引用地址访问。
  • 基本类型的值直接访问。
  1. 复制变量时的不同
  • 基本类型:在将一个保存着原始值的变量复制给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,他们只是拥有相同的value而已。
  • 引用值:在将一个保存着对象内存地址的变量赋给给另一个变量时,会把这个内存地址赋值给新变量,指向堆中同一个对象,任何一个作出的改变都会反映在另一个身上

基本包装类型和引用类型主要区别:对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都是一直保存在内存中.而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁(说的详细一点就是,JS引擎通过在内部临时创建一个对应的包装类型的临时对象,并把对基本类型的操作代理到这个临时对象身上,使得对基本类型的属性访问看起来像对象一样。但是在操作完成后,临时对象就扔掉了,下次再访问时,会重新建立临时对象,当然对之前的临时对象的修改都不会有效。)。所以基本类型的值是不可以被方法改变的,调用方法后返回的是新的值,原来的变量值没有变。

  • 为什么string、number也有自己的方法

JavaScript 为基本数据类型值提供了封装对象,称为原生函数(如 String、Number、Boolean 等)。它们为基本数据类型值提供了该子类型所特有的方法和属性(如:String#trim() 和 Array#concat(..))。

对于简单标量基本类型值,比如 "abc",如果要访问它的 length 属性或 String.prototype 方法,JavaScript 引擎会自动对该值进行封装(即用相应类型的封装对象来包装它)来实 现对这些属性和方法的访问。

当原始数据类型(boolean,Number、String)在调用方法时,JS 将会创建对象,以便调用方法属性,而在使用完毕后将会销毁该对象。原始值被当作构造函数创建的一个对象来使用时, JS 会将其转换为一个对象,以便其可以使用对象的特性(如方法),而后抛弃对象性质,并将它变回到原始值。

  • instanceof、typeof、Object.stringOf

    typeof: undefined、boolean、number、string、symbol、object、function
    console.log(typeof NaN); // number
    console.log(typeof undefined); // undefined
    console.log(typeof null); // Object
    console.log(typeof []); // Object

⭐️instanceof:左边是对象,右边是函数 就是检查,左边对象的原型链上 是否存在 右边构造函数的原型

反过来操作就是:Foo.prototype.isPrototypeOf(a):foo是否出现在a的原型链中

使用instanceof容易造成误解:

⚠️需要注意的是,构造函数本身还是函数,new操作符只是将其调用方式变成“构造函数调用”,本质上还是需要去执行它。在 JavaScript 中对于“构造函数”最准确的解释是,所有带 new 的函数调用。

相关文章

  • Java深拷贝和浅拷贝

    定义 浅拷贝 基本数据类型 拷贝数值 引用类型 拷贝对象引用 深拷贝 基本数据类型 拷贝数值 引用类型 拷贝引用所...

  • 数值类型 — 基本、引用

    null、undefined、boolean、number、string、symbol、object(array、...

  • 引用类型与对象拷贝

    引用类型有哪些?非引用类型有哪些? JS中的数据类型分为基本类型和引用类型。基本类型:数值(number)、字符串...

  • 引用类型对象拷贝

    1.引用类型有哪些?非引用类型有哪些 JavaScript数据分为基本类型值和引用类型值基本类型值(数值、布尔值、...

  • 引用类型对象拷贝

    1.引用类型有哪些?非引用类型有哪些javascript的数据类型分为基本数据类型和引用类型,基本数据类型包括数值...

  • 引用类型和对象拷贝

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

  • 引用类型对象拷贝

    1.引用类型有哪些?非引用类型有哪些 引用类型包括:数组、对象、正则、函数 非引用类型(即基本类型):数值、布尔值...

  • 引用类型对象拷贝(进阶4)

    1.引用类型有哪些?非引用类型有哪些 引用类型包括:数组、对象、正则、函数 非引用类型(即基本类型):数值、布尔值...

  • Integer比较大小

    Integer比较大小 java的两种类型: ● 基本类型 基本数据类类型存的是数值本身 ●引用类型 引用类...

  • 引用类型对象拷贝

    1. 引用类型有哪些?非引用类型有哪些 基本类型值「非引用类型」(数值、布尔值、null和undefined):指...

网友评论

      本文标题:数值类型 — 基本、引用

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