js基础--javaScript数据类型你都弄明白了吗?绝对干货
欢迎访问我的个人博客:http://www.xiaolongwu.cn
数据类型的分类
JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型。
基本数据类型:Null、Undefined、Number,String,Boolean。
复杂数据类型:Object。
一、Object
《JavaScript语言精辟》这本书里面是这么定义的:数组是对象,函数是对象,正则表达式也是对象,当然,对象也是对象。
JavaScript包括一个原型链特性,允许对象继承另一个对象的属性,正确的使用它能减少对象初始化的时间和内存消耗。
二、undefined
这个数据类型只有一个值,就是undefined,它是在var了一个变量之后没有对其初始化的结果。
var a;
console.log(a) //undefined
三、null
这个数据类型也只有一个值,就是null,他表示的是一个空指针对象,这也是typeof类型检测null为什么返回object的原因。
如果我们申明一个变量是为了在以后保存某个值,那么现在我们就把null赋值给它,而不是其他的值。然后我们就可以判断它的值进行一系列的操作。
//例如
var a = null;
if(a != null){
//为undefined时也不能进来
//进行一系列操作
}
还有一点就是,undefined值是派生自null值,所以ECMA规定他们相等测试返回值是true。
console.log(undefined == null); // true
四、Boolean
这个数据类型只有两个值true、false,他们的值分别等价于1和0,但是值类型不相等。
console.log(true == 1,true === 0,false == 0,false === 0); //true false true false
其实在JavaScript中,每种数据类型的值都可以转换为和Boolean类型相等的值,我们可以调用类型转换函数Boolean();
var aa = 0,bb = "leonWu",cc = [1,2,3],cc1 = [], dd = undefined,ee = null;
console.log(Boolean(aa)); //false
console.log(Boolean(bb)); //true
console.log(Boolean(cc)); //true
console.log(Boolean(cc1)); //true
console.log(Boolean(dd)); //false
console.log(Boolean(ee)); //false
由上面的例子我们可以看出,调用的Boolean()函数返回值是boolean数据类型的值,至于返回的是true还是false,取决于被转换值的数据类型及其实际值。
它的转换规则详见下表
| 数据类型 | 转换为true的值 | 转换为false的值 |
|---|---|---|
| boolean | true | false |
| String | 任何非空字符串 | " "(空字符串) |
| Number | 任何非0整数(包括无穷大) | 0和NaN |
| Object | 任何对象 | null |
| Undefined | 不适用 | undefined |
当然,在有的时候,Boolean()函数会被隐式调用,看下面代码
var a1 = "leonWu",a2 = 0;
//1、可以打印出 "进来了"
if(a1){
console.log("进来了")
}
//2、不能打印出 "进来了"
if(a2){
console.log("进来了") //
}
console.log(!a1,!a2) // 3、false true
上面的代码就是在if判断和取非的时候隐式调用了Boolean()函数,第一个相当于Boolean(a1)返回true,第二个相当于Boolean(a2)返回false,第三个相当于 !Boolean(a1)、!Boolean(a2)返回false、true。
在实际编码中 !a2的写法肯定比 !Boolean(a2)的写法简单的多,但是Boolean(a2)的返回值本来是false,我们为了简单,写成了 !a2返回值却是true,和我们想要的结果不一致,容易弄混,所以我们就可以写成 !!a2,这样就可以返回我们想要的值了。
看下面代码
var b1 = "",b2 = "ddd";
console.log(!!b1) // false
console.log(!!b2) // true
本文内容稍有点长,请你耐心往下看
五、String
我对这个数据类型的理解是由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。
他也有个强制转换为字符串的String()方法,可以把任何数据类型转换为字符串。
var bb1 = 123, bb2 = null;
console.log(String(bb1)); // "123"
console.log(String(bb2)); // "null"
还有一个方法.toString()方法,但是只有数值,字符串,对象,布尔值有这个方法,null和undefined没有这个方法。
var bb1 = 123, bb2 = null, bb3 = undefined;
console.log(bb1.toString()); // "123"
console.log(bb2.toString()); // 报错
console.log(bb3.toString()); // 报错
六、Number
这个数据类型包括整数型、浮点型、NaN(not a number),NaN是个特殊的数值,它表示本来要返回一个数值类型的值,但是没有返回,中途出错了,这样可以避免抛出错误。
比如下面几个例子
var a = "leonWu",b = 12,c = null,d = "lwonWu123";
c = a * b;
console.log(c) // NaN
console.log(parseInt(d)); // NaN
console.log(Number(d)); //NaN
和NaN有关的运算符操作,结果也是NaN,NaN和任何数都不相等,页包括它自己。
console.log(typeof NaN); //number
console.log(NaN == NaN); //false
再看下面几个例子
var a = "123leonWu", b = "leonWu123",c = "12.34";
console.log(parseInt(a)); //123
console.log(parseFloat(a)); //123
console.log(Number(a)); //NaN
console.log(parseInt(b)); //NaN
console.log(parseFloat(b)); //NaN
console.log(Number(b)); //NaN
console.log(parseInt(c)); //12
console.log(parseFloat(c)); //12.34
console.log(Number(c)); //12.34
我的github资源地址:https://github.com/js基础--javaScript数据类型你都弄明白了吗?绝对干货.md
我的个人博客地址:http://www.xiaolongwu.cn
我的博客园地址:http://www.cnblogs.com/wuxiaolong555
我的CSDN博客地址:https://blog.csdn.net/wxl1555
如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。
邮箱:wuxiaolong802@163.com
js基础--javaScript数据类型你都弄明白了吗?绝对干货的更多相关文章
- JavaScript01 js基础语法,数据类型
JavaScript的概述: 1.组成 三部分组成 ecmaScript 基础语法 (es5) dom document object model 文档对象模型 (操作html文档内容) bom bo ...
- js基础之数据类型
一:JavaScript 数据类型:字符串.数字.布尔.数组.对象.Null.Undefined JavaScript 字符串; var carname="Bill Gates ...
- JS基础_数据类型-String类型
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- JS基础_数据类型-Number类型
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS基础---->javascript的基础(一)
记录一些javascript的基础知识.只是一起走过一段路而已,何必把怀念弄的比经过还长. javascript的基础 一.在检测一个引用类型值和 Object 构造函数时, instanceof 操 ...
- JS基础---->javascript的基础(二)
记载javascript的一些基础的知识.我们在春风秋雨中无话不说,又在春去秋来中失去了联系. js中string类型 一.字符方法:charAt() 和 charCodeAt() var strin ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--浏览器对象
1.window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法:
- 二、JavaScript语言--JS基础--JavaScript进阶篇--事件响应
1.什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户 ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--JS基础语法
1.变量 定义:从字面上看,变量是可变的量:从编程角度讲,变量是用于存储某种/某些数值的存储器.我们可以把变量看做一个盒子,盒子用来存放物品,物品可以是衣服.玩具.水果...等. 命名:变量名字可以任 ...
随机推荐
- 【算法导论】最小生成树之Kruskal法
在图论中,树是指无回路存在的连通图.一个连通图的生成树是指包含了所有顶点的树.如果把生成树的边的权值总和作为生成树的权,那么权值最小的生成树就称为最小生成树.因为最小生成树在实际中有很多应用,所以我们 ...
- 聊聊javaMail
今天闲着无事 看了看用java发送邮件的相关知识 代码参考自<<精通Java Web整合开发(JSP+AJAX+Struts+Hibernate)>>(第2版) 不多说 先上图 ...
- 高通android开发摘要
一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...
- java自带dom工具使用实例
代码参考自 黄亿华大神的<<1000行代码读懂Spring(一)- 实现一个基本的IoC容器>> 原网页如下 http://my.oschina.net/flashsword/ ...
- Linux多线程编程初探
Linux线程介绍 进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情.有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程 ...
- SpriteBuilder物理对象的父子关系
注意:打开物理使能(Physics-enabled)的节点忽略他们的父节点关系. 这意味着,一个物理使能的子节点不会随着其父节点移动. 物理引擎对于节点父子关系这个概念毫不知情,因此单独的对待所有物理 ...
- Android开发技巧——使用Dialog实现仿QQ的ActionSheet菜单
最近看到有人用Dialog来实现QQ的仿ActionSheet的自定义菜单,对于自己没实现过的一些控件,看着也想实现一下.于是动手了一下,发现也不难,和大家分享一下. 本文原创,转载请注明出处:htt ...
- Socket层实现系列 — bind()的实现(二)
本文主要内容:bind()的TCP层实现.端口的冲突处理,以及不同内核版本的实现差异. 内核版本:3.6 Author:zhangskd @ csdn blog TCP层实现 SOCK_STREAM套 ...
- objc:NSDateFormatter使用备忘
NSDateFormatter类的实例可以将字符串的日期表示转换为NSDate对象或者反向转换. 如果只要显示日期不需要时间,则可以用-setDateStyle方法来设置显示日期的格式,有以下几种: ...
- zookeeper 应用开发
由于zookeeper的client只有zookeeper一个对象,使用也比较简单,所以就不许要文字说明了,在代码中注释下就ok 了. 1.测试用的main方法 package ClientExamp ...