JavaScript有六种数据类型,分别为undefined、null、number、string、Boolean、object,前面的五种是基础数据类型,也称之为原始类型,也就是无法再细分的基本类型,object则是复杂数据类型,其中通常是不止一种数据类型,除此之外在ES6当中又新增加了一种symbol,表示为唯一的值,这个还没有搞懂暂时涉及。

undefined:表示还没有定义

null:表示为'空'

number:整数或者小数

string:字符串文本

boolean:布尔值,true或者false

object:表示一个对象,键值对

Undefined与Null

1.当你通过var声明一个变量并且没有对这个变量进行初始化的时候,那么该变量的数值默认为undefined

var a;
console.log(a);// undefined

此外当你调用函数的时候没有返回值的时候也会默认返回一个undefined

function fn() {}
console.log(fn()); // undefined

2.未声明和未初始化还是有区别的,如下,a未初始化,b则是未声明,系统会报错

var a;

console.log(a);// undefined
console.log(b);// ReferenceError: b is not defined

3.null表示一个空对象的指针,假如你定义一个变量未来将用于存放对象,最好初始化为null

var a = null;

undefined与null的区别在哪里呢?

我们可以这样理解,null表示为有内容,而这个内容就是为空,而undefined表示的为未定义,还没有想好要放什么,假设我们面前放着这一张纸张想要画画,如果使用null,意思就是这张纸的画面就是一片空白(艺术!艺术!),而如果使用了undefined则是我放着这一张纸,但是还没想好画什么呢,就先这样放着吧。

但是如果你使用==来进行对比你会发现返回一个true,并且在if语句的()当中两者都会被转换成false.

Boolean

布尔值只有两个值:true表示真false表示假,区分大小写,通常以下情况下会出现布尔值,

逻辑运算符: &&、||、!

运输符: 、!=、=、!==、>、>=、<、<=

if语句的()当中自动转化为boolean值

此外还可以使用Boolean()来进行转换,除了undefined、null、false、0、NaN、""或''(空字符串)会被转化为false之外,其余都会被转换为truw

Number

1.JavaScript的所有数字都是以64位浮点数形式储存,由于二进制浮点数的算法原因,我们还能看到以下情况

console.log(0.1 + 0.2 ); // false

实际得到的数值是略微大于0.3的,具体可以看这里

2.除了十进制外还可以表示为八进制、十六进制、二进制

// 八进制:有前缀0的数值,或者有前导0、且只有0-7
var num8 = 070; // 56 // 十六进制:有前缀0x或0X的数值,有且只有0-9,a-f
var num16 = 0X3e; // 62 // 二进制:有前缀0b或0B的数值,有且只有0,1
var num2 = 0B10; // 2

3.number还可以使用科学计数法进行表示

console.log(3e13); // 30000000000000
console.log(3e-3); // 0.003

4.JavaScript的Number对象提供可以表示的最大最小是

Number.MAX_VALUE // 1.7976931348623157e+308  2的1024次方
Number.MIN_VALUE // 5e-324 2的-1023次方

当你超过之后就会发生溢出,编程Inifinity,如果为负数则是-Inifinity,

5.NaN表示为非数值,当本来要返回数值的操作未返回数值的情况,例如数字同字符串的-

console.log('a' - 10); // NaN

当然要是使用+就不会返回NaN,因为会转化为字符串。

console.log('a' + 10); // a10

任何同NaN的操作都会返回NaN

console.log(NaN + 10); // NaN

并且NaN同任何值都不相等,包括自身。

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

6.+0与-0

两者通常情况下都是相等的,除了作为分母的时候

console.log((1 / +0) === (1 / -0)); // false

7.与数值相关的全局方法有

parseInt():用于将字符串转化为整数

parseFloat():转换为浮点数

isNaN():是否为非数值

isFinite():是否为正常数值

具体转化规则行查询文档,这里需要注意的是parseInt()有第二个参数,表示的是被解析字符串的进制

parseInt('1000', 2) // 8
parseInt('1000', 8) // 512

String

1.字符串通常用"",''表示,可以在单引号当中放双引号,反过来也可以,需要注意的是开头结尾要相同

console.log('a string"); // 报错 nvalid or unexpected token

2.有一些特殊字符不可以直接在字符串当中打出来,需要通过转义符\才行

\0 :null(\u0000)

\b :后退键(\u0008)

\f :换页符(\u000C)

\n :换行符(\u000A)

\r :回车键(\u000D)

\t :制表符(\u0009)

\v :垂直制表符(\u000B)

' :单引号(\u0027)

" :双引号(\u0022)

\ :反斜杠(\u005C)

3.当字符串被创建后就不可变(包括数组的length也是不可变),要改变内容只能先销毁先前的内容。

var lang = 'java';
lang = lang + 'script';

上面操作并不是直接在原来的数组直接拼接script字符串,而是创建一个新的字符串,然后填充javascript之后销毁先前的两个字符串。

4.字符串可以使用数组方括号方式读取

var str = 'this is a string';
console.log(str[0]); // t

5.toString()数值、布尔值、对象、字符串都有这个方法,详情看MDN文档

object

1.对象简单讲就是键对值的集合,其中可以包含多种数据类型,包括嵌套对象

var obj = {
num: 123,
str: 'javascript',
bool: false,
otherObj: {}
}

2.对象是引用类型,也就是说上面的obj实际上存放的是某个对象的地址,因此,当另一个对象直接等于obj的时候,实际上复制的是对象的地址,因此无论哪个修改都会影响到另一个对象,属于浅拷贝。

var obj1 = {a: 1}
var obj2 = obj1; obj2.a = 3; console.log(obj1.a); // 3

3.属性的读取和设置可以使用.点操作符或者[],数字键名不能用.读取,还需要注意的是方括号当中属性名需要用""包裹

var obj = {
1: 666,
'a_b': 777
} console.log(obj.1); // 报错
console.log(obj[1]); // 666 console.log(obj[a_b]); // 报错
console.log(obj['a_b']); // 777

属性的删除则是使用delete

delete obj.1;

4.想要知道对象当中是否存在某个属性可以使用in,返回一个布尔值

var obj = {a: 1};
'a' in obj // true

使用for in可以遍历对象全部属性

for (var i in obj) {
console.log(i);
}

使用这两个的时候为了避免遍历到继承的属性和方法,应当使用hasOwnProperty()先进行判断是否为对象本身的属性方法。

for (var i in obj) {
if (object.hasOwnProperty(i)) {
// ...
}
}

5.对象实例常用属性和方法

constructor: 指向构造函数的指针

hasOwnProperty(): 判断是否对象本身的属性

toString():返回对象的字符串表示。

valueOf():返回对象的字符串、数值或布尔值表示。

typeof与instanceof

typeof可以用来确定数据类型

console.log(typeof 'str'); // string
console.log(typeof 123); // number
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined function fn(){};
console.log(typeof fn); // function console.log(typeof null); // object

可以看到null返回了一个object,说明null本质是一个对象,一个空对象。

对于以上类型typeof够用了,然而对于复杂的object却并不够

console.log(typeof []); //object
console.log(typeof {}); //object

这时候需要我们的instanceof了,它会返回一个布尔值,表示的是是否为某个构造函数的实例

console.log([] instanceof Array); //true
console.log({} instanceof Object); //true var str = new String();
console.log(str instanceof String); //true

参考

阮一峰JavaScript教程-数据类型

JavaScript高级程序设计 第三章

【笔记】JS数据类型总结的更多相关文章

  1. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  2. 前端学习:学习笔记(JS部分)

    前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解)    JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...

  3. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  4. 由js apply与call方法想到的js数据类型(原始类型和引用类型)

    原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...

  5. 总结的JS数据类型判定(非常全面)

    用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用 ...

  6. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  7. JS数据类型的理解(猜测)

    Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系 ...

  8. web开发与设计--js数据类型,js运营商

    1. js数据类型划分:号码值类型,布尔,串 由typeof能够看到什么类型的数据被详述. 举例: <span style="font-family:Microsoft YaHei;f ...

  9. [妙味JS基础]第四课:JS数据类型、类型转换

    知识点总结 JS数据类型:number数字(NaN).string字符串.boolean布尔值.函数类型.object对象(obj.[].{}.null).undefined未定义 typeof 用来 ...

  10. JavaScript大厦之地基:js数据类型

    一.数据和类型        俗话说物以类聚,人以群分:这里将人和物都按类别进行了区分.我们数据也一样,使用计算机我们能处理数值,也可以处理文本还可以处理图形.音频.视频等各种各样的数据,不同的数据有 ...

随机推荐

  1. 快排,归并和Shell排序

    快速排序 快速排序的执行流程: (1) 先从数列中取出一个数作为基准数. (2) 将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. (3)再对左右区间重复第二步,直到各区间只有一个数. ...

  2. [PKUWC 2018]随机算法

    Description 题库链接 给定一张有 \(n\) 个点 \(m\) 条边的无向图,生成 \(1\sim n\) 的全排列,假设一个排列是 \(p\) , \(S\) 是当前最大独立集:如果 \ ...

  3. Node.js数据流Stream之Readable流和Writable流

    一.前传 Stream在很多语言都会有,当然Node.js也不例外.数据流是可读.可写.或即可读又可写的内存结构.Node.js中主要包括Readable.Writable.Duplex(双工)和Tr ...

  4. IOS bug之cannot be opened because the project file cannot be parsed

    刚才用Cornerstone更新代码后,再次打开项目时,不能打开,提示cannot be opened because the project file cannot be parsed后来在网上查了 ...

  5. BG.Sqoop

    1. 下载 Sqoop,并复制到虚拟机 http://sqoop.apache.org/ 2. 安装Sqoop tar zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha. ...

  6. Session和Cookie的区别与联系

    一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,W ...

  7. set集合去重机制

  8. 用数组指针遍历数组,FOR/FOREACH遍历数组

    1. 用数组指针遍历一维数组 <?php header("Content-type:text/html;charset=utf-8"); /*用数组指针遍历一位数组的值*/ ...

  9. canvas框架::createjs入门

    createjs是一个轻量级的框架,稍微有点时间和耐心,就可以把全部源代码都看一遍,毕竟只有三十几个js文件.地址:http://www.createjs.com/ 开发createjs的动画或游戏, ...

  10. 2017年值得学习的3个CSS特性

    原文:https://bitsofco.de/3-new-css-features-to-learn-in-2017/译文:http://caibaojian.com/3-new-css-featur ...