乐趣区

关于javascript:数据类型与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"
退出移动版