数据类型与typeof

个人学习笔记,如有错误请指出

数据类型

基本数据类型(原始值类型)

  • number NaN/Infinity特殊
  • string 单引号/双引号/反引号``
  • boolean true/false
  • null
  • undefined
  • symbol 创建唯一值
  • bigint

引用数据类型:

  • object

    • {} 普通对象
    • [] 数组对象
    • /^[+-]?(?:\d|(?:[1-9]\d+))(\.\d+)?$/ 正则对象
    • 日期对象
    • function(较为特殊,函数是一个附带可被调用功能的常规的对象
    • ...

一共8大数据类型

更加详细和官方的解释参考MDN: JavaScript 数据类型和数据结构

注意:
javascript中,setmap是一种数据结构,本质上还是Object类型

typeof

typeof 操作符返回一个字符串,表示未经计算的操作数的类型

//7个基本数据类型
typeof 10
//"number"
typeof '1'
//"string"
typeof null
//"object"
typeof undefined
//"undefined"
typeof Symbol()
//"symbol"
typeof 9007199254740991n
//"bigint"
typeof true
//"boolean"
//object类型
typeof {}
//"object"
typeof []
//"object"
typeof /^$/
//"object"
typeof new Date()
//"object"

注意比较特殊的

//需要记住的特殊值
typeof NaN
//"number"
typeof function(){}
//"function"
typeof null
//"object"
typeof []//不要搞混,typeof 细分对象是不可以的
//"object"

注意三个包装对象

所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的NumberStringBoolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);

typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

v1 === 123 // false
v2 === 'abc' // false
v3 === true // false

typeof null === 'object' 原因

typeof的原理:

  • 所有的数据类型值在计算机中存储的都是按照“二进制”存储的
  • null -> 000000
  • 只要是对象都是以 000 开始的
  • typeof`检测的时候,是按照计算机存储的二进制的值来检测的

MDN解释:

总结:

因为在javascript当中值的类型由类型标签+实际数值表示,对象的类型标签是0,而null指向空指针,用0x00的值来表示,所以null的类型标签也是0,因此typeof null 返回 "object"

NaN

NaN:not a number 不是一个有效数字,但是它属于number数据类型的

console.log(typeof NaN); //=>"number"
console.log(NaN == NaN); //=>false
console.log(NaN === NaN); //=>false
let n = 10;

//如何检测是NaN
if (isNaN(n)) {
    // 条件成立:证明它真的是非有效数字
}
Object.is([val1],[val2])//检测两个值是否相等
console.log(Object.is(NaN, NaN)); //=>true

Object.is()内部对NaN的判断做了特殊处理

Infinity

typeof Infinity//"number"
Infinity===Infinity//true
-Infinity===Infinity//false

symbol

简单介绍

JS 中的 Symbol 是什么?
ECMAScript 6入门-Symbol

Symbol 可以创建一个独一无二的值。


console.log(new Symbol()); //Uncaught TypeError: Symbol is not a constructor
//无法使用new Sumbol(基本数据类型)
console.log(Symbol('AA') === Symbol('AA')); //false
//每次都会创建一个唯一值,括号中的字符串可以看做标记,注释,只是为了区分

let symb = Symbol('BB');
console.log(symb === symb); //true

bigint

最大安全数与最小安全数

Number.MAX_SAFE_INTEGER//9007199254740991
Number.MIN_SAFE_INTEGER//-9007199254740991
Math.pow(2,53)//9007199254740992

超过这个数计算会出现错误

bigint解决大数问题

如果服务器存储ID是长整型,int值非常大。当服务器将其转化为字符串的时候,返回给客户端就没有问题,如果服务器以Number类型返回,那么这个返回的id在浏览器中和服务器中值不一样,会发生改变,出现错误

为了解决这个问题,在es6中引入新的数据类型bigint,在数字后面加n即为bigint类型

9007199254740992123n+1n//9007199254740992124n
typeof 9007199254740992124n//"bigint"
(0)

相关推荐

  • JavaScript:数据类型

    JavaScript中有6种数据类型,其中包含了5种基本数据类型和1种复杂数据类型. ·       基本数据类型:undefined.null.boolean.number和String ·     ...

  • JS中的基本类型和引用类型

    内置类型 JS 中七种内置类型(null,undefined,boolean,number,string,symbol,object)又分为两大类型 两大类型: 基本类型: null,undefine ...

  • JavaScript入门-js的变量以及运算

    关于js变量 变量,就是一个用来存储数据的容器 一般来说,我们的变量都是可以得先声明,再使用,就像是一个东西先必须存在,才能看得见摸得着.然而在js里(es5),可以先使用,后声明. a = 100; ...

  • 前端面试题整理——Javascript基础

    常见值类型: let a; //undefined let s = 'abc'; let n = 100; let b = true; let sb = Symbol('s'); let nn = N ...

  • 编程语言基于javascript 显式转换与隐式转换(详解)_javascript技巧

    显示转换 1.题目:请输入今年的年龄,求5年后多大? //a.prompt接收到的数据是string类型的. var age = prompt("请输入你今年的年龄"); aler ...

  • Excel VBA 获取当前单元格的数据类型

    chenqiai0 2016-08-06 16:28:29  8762  收藏 4 分类专栏: VBA 一步一步学习VBA 文章标签: 一步一步学习VBA Excel VBA 获取当前单元格的数据类型 ...

  • Hive支持的数据类型

    Hive 提供了基本数据类型和复杂数据类型1.1 原始数据类型#整型TINYINT - 微整型,只占用1个字节,只能存储0-255的整数.SMALLINT– 小整型,占用2个字节,存储范围–32768 ...

  • Hive之数据类型

    数字类 类型 长度 备注 TINYINT 1字节 有符号整型 SMALLINT 2字节 有符号整型 INT 4字节 有符号整型 BIGINT 8字节 有符号整型 FLOAT 4字节 有符号单精度浮点数 ...

  • redis数据类型之set,zset,hash

    上一篇说了string和list两种数据类型,现在说说剩下的几种数据类型: 继续敲命令每一个命令,害╮(╯_╰)╭ 1.set 这个就类似于java中的Set<Set<T>>, ...

  • ​以下哪种变量类型不是SPSS定义的数据类型:( )。 A.数值 B.字符串 C.日期 D.逻辑

    以下哪种变量类型不是SPSS定义的数据类型:( ). A.数值 B.字符串 C.日期 D.逻辑

  • Java基本数据类型

    变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过定义不同类型的变量,可以在内存 ...

  • python数据类型详解

    目录 1.字符串 2.布尔类型 3.整数 4.浮点数 5.数字 6.列表 7.元组 8.字典 9.日期 1.字符串 1.1.如何在Python中使用字符串 a.使用单引号(') 用单引号括起来表示字符 ...

  • sqlite 数据类型

    一般数据采用固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断. SQLite具有以下五种数据类型: 1.NULL:空值. 2.INTEGER:带符号的整型,具体取决有存入数 ...

  • 学习下Redis这个核心数据类型

    string 字符串 tring 类型是二进制安全的,即 string 中可以包含任何数据. Redis 中的普通 string 采用 raw encoding 即原始编码方式,该编码方式会动态扩容, ...