javascript数据类型理解整理

缘起:关于数据类型这块,自己看了森布满相关的资料,每次查看和履都出一对回味与透亮;但同时感觉到没有了解透,总是差一点,最近又于羁押这块的情节,加上近年来底积聚,做只相关笔记

ECMAScript数据类型:

  1. 5遭受简单数据类型:String Number Boolean Undefined Null
  2. 1栽复杂数据类:Object,本质是如出一辙组无序的名值对成的,eg:Array JSON

    【理解】对于JS数据方面的操作,都是数据类型之间的换和操作,只要针对的破每一样种多少列,在日益的融合,JS水平会生一个可怜好之进化;

typeof操作符

  1. 眼看是单操作符,不是办法
    2.
    据此typeof存在,是因ECMAScript是麻木不仁型的语言;松散型就是变量可以是随便数据类型,可以随便转换(不推荐)

    typeof(String) => string => 如果此价值是字符串
    typeof(Number) => number => 如果是价是数值
    typeof(Boolean) => boolean => 如果这个价值是布尔值
    typeof(Undefined) => undefined => 如果这价未定义
    typeof(Object) => object => 如果此价值是目标要null
    typeof(Function) => function => 如果是价值是函数

一、 Undefined类型

当【声明】一个变量,但是【未初始化】,这个变量的值就是undefined
直接以来的疑惑:

  1. 对【未初始化】的变量执行typeof操作符,返回undefined值
  2. 针对【未声明】的变量执行typeof操作符,返回undefined值

    var message;
    console.log(typeof message); // undefined
    console.log(typeof age); // undefined

疑惑:导致自己直接无晓得该怎么化解这问题,书上标注的解决办法是:显式的以undefined来给没有初始化的变量进行赋值,每次实践的结果及开及说之生出入

幡然醒悟:自己刚成了jQuery上的$.type()的家伙函数,和投机写的一部分事例

var message;
// jQuery中$.type()工具函数
console.log($.type(message)); // undefined
console.log($.type(age)); // 【报错】age is not defined
// 自己理解写的例子
console.log(message==undefined); // true
console.log(age==undefined); // 【报错】age is not defined

从而,无论从$.type()的角度看,验证结果;还是于例子中查阅结果,都足以望,对于【未声明】和【未初始化】分离与说明都无是难题;
【注】对于$.type()的法则实现,是否是自例子中之道,我还从来不认证;当然就不是生死攸关,重点是,妈妈还为无担心自己分开不干净【未声明】和【未初始化】了;

【项目面临】在骨子里的花色遭到,肯定是不允许发生报错行为的,这样大大的熏陶了次的愈来愈运行;所以,用底这种办法:

var message;
// jQuery中$.type()工具函数
console.log($.type(message)); // undefined
try{
    console.log($.type(age)); // 不报错了
}catch(e){
    console.log("age is not defined!");
};
// 自己理解写的例子
console.log(message==undefined); // true
try{
    console.log(age==undefined); // 不报错了
}catch(e){
    console.log("age is not defined!");
};

 二、Null类型

1.起逻辑的角度,null值表示一个缺损对象指针
2.typeof(null),返回object
3.如果定义之变量未来备就此来保存对象,最好以那初始化成null
倘检测出不是null就可拓展下一致步操作:
if(ele != null){ //要执行之代码 }
4.undefined值是派生自null值,因此:console.log(undefined == null);
//true

console.log(undefined == null); // true
// 从JS角度
console.log(typeof undefined); // undefined
console.log(typeof null); // object
// 从jQuery角度
console.log($.type(undefined)); // undefined
console.log($.type(null)); // null

 三、Boolean类型

1.发少单字面量:true and false
2.区区划轻重缓急写,只有都小写形式,属于Boolean类型,其余的光是标识符
3.转型函数Boolean(),将随意档次的字符转换成Boolean类型
转换规则:
数据类型 => true => false

String类型 => 任意非空字符串 => ""(空字符串)
Number类型 => => 任意非零数字值(包括无穷大) => 0和NaN
Boolean类型 => true => false
Object类型 => 任意对象 => null
Undefined类型 => n/a(or N/A),意思是不适用(not applicable) => undefined

四、Number类型

1.勤价字面量表示法:十进制、八进制(严格模式不支持,直接报错)、十六进制
八进制:第一个必须是0,然后是八进制数字序列(0~7)
十六进制:前片号必须是0x,后和十六进制数字序列(0~9及A~F),字母(A~F)大小写都好
算术计算时:所有因八进制和十六进制表示的数值最终都用吃转换成为十进制数值
正零 == 负零(+0 == -0)

2.浮点数值
哪怕数值中富含一个不怎么数触及,小数点后必至少发生一致个数字
小数点前面可没有整数,但是未推荐(.1)
封存浮点数值所待的内存空间是保留整数的有数倍增,所以下这些浮点数,会当整数处理

1. => 1
10.0 => 10

于大极小之数值,可以用e表示法(即科学计数法)来代表浮点数值;e前面的数值*10的指数次幂,幂是e后面的数值

3.125e7 == 31250000
0.00000000000000003 == 3e-17

默认情况下,ECMAScript会将那些稍微数点后面带有6独七零八落之上的浮点数值转换成e表示拟
浮点数值的万丈精度是17各项小数,但在进行算数计算时该精确度远远不如整数

0.1 + 0.2 != 0.3
0.1 + 0.2 != 0.30000000000000004

【注】浮点数值计算出舍入误差,其它基于IEEE754数值的浮点数计算语言都起及时仿佛通病

3.数值限量
由内存的限制,ECMAScript不克保存世界上保有的数值

最小值:Number.MIN_VALUE
最大值:Number.MAX_VALUE

最值具体等于多少数价,不同之浏览器有异的结果,具体以实际也按
数值计算结果出乎最值范围,将为机关转换成奇之在是Infinity(正无穷)值,负值是-Infinity(负无穷)
认清有数值是不是发出穷数值(是匪是位于最小值和无限要命价值内),可以利用isFinish()函数,结果是来彻底的归true,否则false

var num = Number.MIN_VALUE + Number.MAX_VALUE;
console.log(num); // false

Infinity和-Infinity保存只

Number.POSITIVE_INFINITY == Infinity
Number.NEGATIVE_INFINITY == -Infinity

4.NaN
NaN,即非数值(Not a
Number)是一个奇特之数值,当数值计算起错误的时节,返回NaN,如:任何数除以0会回去NaN,这样不影响外代码的执行

个别单性状:

1.别关系NaN的操作(NaN/10)都见面回去NaN,这个特性在多步计算中产生或引致问题
— 2.NaN及另价值都无对等,包括NaN本身

console.log(NaN == NaN); // false

isNaN()函数,这个函数接收一个参数,该参数可以是其余类型;意思是是否【不是数值】
当参数不是数值时,返回true;当参数是数值时,返回false

console.log(isNaN("10")); // false
console.log(isNaN("blue")); //true

isNaN()也适用于对象,首先调用对象的valueof()方法=?是否可变为数值,如果不可知,在调用toString()方法