美文网首页
JS中的8种数据类型和区别

JS中的8种数据类型和区别

作者: 江平路 | 来源:发表于2020-08-16 00:14 被阅读0次

在ES5的时候,我们认知的数据类型确实是 6种:Number、String、Boolean、undefined、object、Null。

ES6 中新增了一种 Symbol。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。

谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。(但是很多人不把这个做为一个类型)。

基本数据类型

Number,String,Boolean,null,undefined,symbol,bigint(后两个为ES6新增)

1、Undefined 类型

        只有一个值。在使用var 声明变量但未对其加初始化时,这个变量就是undefined。

2、Null 类型

        只有一个值。null是表示一个空对象指针,这也是typeof操作符检测 null 值时会返回 object 的原因。

3、Boolean 类型

        使用最多的一个类型,有两个字面值,分别是true、false。true不一定等于1,false不一定等于0。

        boolean类型的字面值是区分大小写的。True和False是标识符

4、Number 类型

        数字类型,表示数据的整数和浮点数。某些语言中也称为“双精度值”。

        var intNum = 55;十进制

        var num = 012;八进制

        var octalNum = 0x23;十六进制

5、String 类型

        字符串可以有单引号、双引号表示。字符串是不可变的,一旦创建,值就不能改变

        要改变某个变量保存的字符串,首先要销毁原来的字符串,然后于用另一个包含的字符串填充该变量。

        注)toString()可以输出二进制、八进制、十进制,十六进制。

               null和undefined没有toString()方法,用String函数不返回这两个值的字面量。

6、 Symbol 类型

        Symbol 类型的对象永远不相等,即便创建的时候传入相同的值。因此,可以用解决属性名冲突的问题(适用于多少编码),做为标记。

        这是 es6 新增的数据类型。    

7、BigInt 类型

        Javascript 中的任意精度整数,可以安全存储和操作大整数。即始超出 Number 能够表示的安全整数范围。是 chrome 67中的新功能。

应用数据类型

object,function(__proto__ Function.prototype)                         

object:普通对象,数组对象,正则对象,日期对象,Math数学函数对象。

8、Object 类型

        ECMAjavascript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。创建object类型的实例并为其添加属性(或)方法,就可以自定义创建对象。

        如:var o = new Object( );

        object 的每个实例都有下列属性和方法:

        constructor:保存着用于创建当前对象的函数。(构造函数)constructor就是object();

        hasOwnProperty(propertyName):用于检查给定的当前属性在当前对象实例中)而不是在实例原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字稚串形式指定(例如:o.hasOwnProperty(“name”))。

        isPrototypeOf(object):用于检查传入的对象是否是传入对象原型。

        propertyIsEnumerable(propertyName):用于检查给定属性是否能够用for-in语句。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。

        toLocaleString( ):返回对象的字符串表示,该字符串与执行环境的地区对应。

        toString( ):返回对象的字符串表示。

        valueOf( ):返回对象的字符串、数值或者布尔值表示。通常与toString( )方法的返回值得相同。

        ECMAJS中object是所有对象的基础,因些所有对象都具有这些基本的属性和方法。

数据类型检测

-typeof 检测数据类型的逻辑运算符

-instanceof 检测是否为某个类型的实例

-constructor 检测构造函数

-Object.prototype.toString.call 检测数据类型

typeof [ value ] 返回当前值的数据类型    "数据类型"

-返回的结果都是字符串

-局限性

     + typeof null => "object"

     + typeof 不能细分类型(检测普通对象或数组对象都是"object")

 输出结果:"string"

ps:所有的值,在内存中都是以二进制存储的。

 把其它类型转换为数字的方法: 

     + 强转换 (基于底层机制转换的)    number([ value ])                  

           + 一些隐式转换都是基于Number转换的          ps:即不直接调用number 但还是会利用number先进行转换

                  + isNaN(' 12px ') 先把其它类型转换为数字再检测   

                  + 数学运算  '12px'  - 13 

                  + 字符串 == 数字 两个等号比较很多时候也是要把其它值转换为数字

                  + ...

     + 弱转换 (基于一些额外的转换)    parseInt([  value ])/ paresFloat([ value ])

JS之所以能在浏览器运行,是因为浏览器给JS提供了执行环境 => 栈内存(Stack)

栈内存:提供代码执行环境

堆内存:存放东西(属性,方法)

存储方式

基本数据类型是直接存储在栈中的简单数据段,占据空间小、大小固定,属于被频繁使用的数据。栈是存储基本类型值和执行代码的空间。

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

两种数据类型的区别

1.堆比栈空间大,栈比堆运行速度快。

2.堆内存是无序存储,可以根据引用直接获取。

3.基础数据类型比较稳定,而且相对来说占用的内存小。

4.引用数据类型大小是动态的,而且是无限的。

相关文章

  • js复习

    1 数据类型 2 ===和==的区别, 3 js onload和DOMcontentloaded的区别 ...

  • js数据类型

    JS基本数据类型和引用数据类型(JS 基本数据类型和引用数据类型的区别及浅拷贝和深拷贝) 再讲 js 的基本数据类...

  • 2019-06-06 JS中基本数据类型

    JS中基本数据类型有哪几种?null 是对象吗?基本数据和复杂数据类型有什么区别? JS的基本数据类型:Undef...

  • js小知识1

    js的原始类型?null是对象吗,基本数据类型和引用类型的区别 js中类型转化的规则 ==与===区别,什么情况下...

  • js笔记六之基本数据类型和引用数据类型的区别

    基本数据类型和引用数据类型的区别 js是运行在浏览器中的(内核引擎)浏览器会为js提供赖以生存的环境(提供给js代...

  • js 值,类型,变量

    什么是值?什么是类型?什么是变量? 它们之间的区别和联系?js中数据类型分为基本数据类型:undefined、 n...

  • js底层数据类型

    js底层数据类型 堆和栈的区别 其实深拷贝和浅拷贝的主要区别就是其在内存中的存储类型不同。 堆和栈都是内存中划分出...

  • JavaScript基础学习-详解数据类型

    数据类型 JS中的数据类型分为2种:原始数据类型(基本数据类型)、引用数据类型。二者的区别在于在内存中存储位置不同...

  • JS:手写实现深拷贝,这次彻底搞懂

    深拷贝和浅拷贝的区别 在 JS 中,数据类型[https://www.jianshu.com/p/444fd8e3...

  • 深入理解JS的数据类型

    js数据类型主要分为基本数据类型和引用数据类型 基本数据类型和引用数据类型的区别:基本数据类型是对值得引用,引用数...

网友评论

      本文标题:JS中的8种数据类型和区别

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