起因:关于数据类型这块,自己看了很多遍相关的资料,每次查看和实践都有一些体会和理解;但又感到没有理解透,总是差一点,最近又在看这块的内容,加上最近的积累,做个相关笔记

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()方法

javascript数据类型理解整理的更多相关文章

  1. 《javascript个人理解,个人整理。》

    万事开头难. 本人做前端工程师,已几年,没有特别大的,已文字方式去做总结. 前段时间,早已经想好,但是迟迟没有去下笔!好在现在陆陆续续的写下去. 我知道这是一个很大的工程,但是我还是想做下去,不为别的 ...

  2. Javascript:Javascript数据类型详解

    要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功.从Javascript数据类型开始,我将对Javascript知识体 ...

  3. 数据的分类-JavaScript数据类型

    JavaScript数据类型 1.数据类型是什么? 我们接触的绝大多数程序语言来说,把数据都进行了分类,包括数字.字符.逻辑真假:int,long,string,boolean....等等:我们都知道 ...

  4. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  5. JavaScript 数据类型检测总结

    JavaScript 数据类型检测总结 原文:https://blog.csdn.net/q3254421/article/details/85483462 在js中,有四种用于检测数据类型的方式,分 ...

  6. JavaScript筑基篇(二)->JavaScript数据类型

    说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...

  7. 02 JavaScript数据类型、类型转换、注释

    JavaScript 数据类型 JavaScript 变量能够保存多种数据类型:数值.字符串值.数组.对象.undefined.null等等 var length = 7; // 数字 var las ...

  8. JavaScript数据类型 typeof, null, 和 undefined

    JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...

  9. Javascript中理解发布--订阅模式

    Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 如何实现发布--订阅模式? 发布---订阅模式的代码封装 如何取消订阅事件? 全局--发布订阅对象代码封装 理解模块间通信 回到 ...

随机推荐

  1. ECMAScript 位运算符

    位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...

  2. 34988 Happy Reversal(二进制去取反)

    /* 题意:给多个二进制数,对某些数进行按位取反操作! 然后从中找到最大数和最小数,并输出他们的差值! 注意:所有的数都是整数,包括取反之后 思路:一个n为二进制数x,令tmp为n位全1!则 y=tm ...

  3. Java多线程系列--“JUC集合”07之 ArrayBlockingQueue

    概要 本章对Java.util.concurrent包中的ArrayBlockingQueue类进行详细的介绍.内容包括:ArrayBlockingQueue介绍ArrayBlockingQueue原 ...

  4. [python]计算机使用过程中,眼睛强制休息

    前言 现在的电脑族们,在使用电脑的过程中,常常忘记了时间的流逝,要么忙碌在电视剧的观看中,要么忙碌在工作中,要么忙碌在游戏中,往往忽视了对眼睛的正常保护,让眼睛能够在空闲的时候获得足够的休息时间. 我 ...

  5. SQL中利用DMV进行数据库性能分析

    相信朋友对SQL Server性能调优相关的知识或多或少都有一些了解.虽然说现在NOSQL相关的技术非常的火热,但是RMDB(关系型数据库)与NOSQL是并存的,并且适用在各种的项目中.在一般的企业级 ...

  6. JDK和tomcat环境变量配置

    JDK环境变量配置:   如果你的JDK安装在C盘里,如:C:\Program Files\Java\jdk1.6.0_05, 那么就在系统变量里(当然也可以在用户变量里)点新建: 变量名:JAVA_ ...

  7. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  8. java设计模式学习(-)

    在我目前看来博客的作用就是笔记了,所谓的原创也仅仅是复制了别人的东西实践了一下,但为了学习记忆确实要记录下来.在这里感谢网络各处的资源,原谅我对资源的索取. 接下来每天开始学以则设计模式或者几天学一则 ...

  9. Swift泛型协议的N种用法

    They said "you should learn a new language every year," so I  learned Swift. Now  I  learn ...

  10. ansible入门

    前言 最近看了一下ansible,挺火的一个配置管理工具,对比老大哥puppet,使用起来要简单一些,并且可以批量执行命令,对比同是python语言编写的saltstack,不需要安装客户端(基于pa ...