这一章节的学习更推荐大家使用——node.js的交互环境:
- 直接输入:
node
即可进入; - 输入表达式会返回整个表达式的值;输入变量名会返回变量的值;输入
typeof 变量名
可快速检测类型;(很方便去测试) - 按两次
Ctrl + C
退出;
一. 基本数据类型
JS中共有五种基本数据类型:Number,String,Boolean,Null,undefined。基本数据类型以类似键值对的形式保存在栈区:
// 变量名称 = 存储的数据(值);
var a = 1;
var b = true;
var name = 'zevin';
1.1 Number
var a = 2;
var a = 2.2;
var a = 0x10;
var a = 010;
数字有很多类型,按照数字精度可以分为整数(int),单精度(float),双精度(double ),按照数字的表示方法可以分为二进制(Binary),八进制(Octal),十进制(decimal system),十六进制(Hexadecimal)。但是在Js中,所有的数字统一使用Number来表示。
(体现JS弱类型语言特点:类型细分不明显)
typeof a ;//输出'number'
特殊拓展:
- NaN(Not a Number)
var a = 10 / 'b'; //计算错误,结果不是一个数字
console.log(a); //输出:NaN
typeof a; // 输出:number
- 无穷大(Infinity / -Infinity)
var a = 10/0;
var b = -10/0;
console.log(a); //输出:Infinity
console.log(b); //输出:-Infinity
1.2 String
字符串类型,该类型表示由零个或者多个16位Unicode字符组成的字符序列,即字符串。通常用单引号 / 双引号 / 反引号括起来,或者结合嵌套使用。
var a = "hello world";//双引号
var a = 'hello world';//单引号
var a = `
hello world
` ;//反引号(会打印出换行)
var json = '{"name":"zevin","age":21}';//单双引号交替使用
分别的输出结果为:
hello world
hello world
hello world
{"name":"zevin","age":21}
上述第四种写法后期可以解析输出成对象:
console.log(JSON.parse(json));
输出:{"name":"zevin","age":21}//对象会有高亮显示
1.3 Boolean
布尔类型,取值为true / false,通常用于条件判断。
var a = true;
var a = false;
1.4 Null
空引用数据类型。当前a变量为空对象(没有对象,而不是 0 ),将来可能会保存一个对象。
var a = null;
还有一个注意的点:
当我们用typeof
检测a
时,输出的结果是'object'
,而不是'null'
。那么问题来了,我们为什么不把null
归到对象里?
当然从这个角度来看是可以归为对象的。之所以没归,是因为null
不能调用对象的任何属性和方法。
我们可以再写一个标准对象格式的空对象:
var a = {};
a.toString();//调用对象的toString()方法
输出:'[object Object]'
1.5 undefined
未定义类型。该类型只有一个值undefined
。对未声明和未初始化的变量执行typeof
操作符都返回undefined
。
var a ;
var a = "undefined";
这两种声明形式用typeof
检测结果都为'undefined'
。,但是实际上没有必要把一个变量的值显式设置为undefined
。
还可以再拓展一点:
undefined
类型和null
类型的比较:(实际上 undefined
派生自null
值)
var a;
var b = null;
a == b //结果为ture(==先转换类型再比较值)
a === b //结果为false(===先判断类型后判断值)
二. 引用数据类型
(本文中只是简单介绍,后续会专门单篇介绍三大引用数据类型)
在JS中除了以上基本数据类型之外的其他所有类型都可以归结为引用数据类型。变量的引用地址保存在栈区,真正的值保存在堆区。
比如:d变量为对象类型,真正的值保存在堆区的一块引用地址为B001
的内存中,在栈区保存的就是引用地址B001
。
var d = {name:"zevin",age:"21"};
2.1 对象
对象是模拟现实生活的对象,对象由键值对组成,通过使用大括号将所有键值对括起来。
var a = {name:"zevin",age:"21"};
2.2 数组
数组是一个特殊的对象,包含了多个值,值与值之间使用逗号分隔开,所有的值通过中括号括起来。
var array = [5,2,0];
2.3 函数
函数是代码执行单元,用于实现某些特殊的功能。
function add(a,b){
return a + b;
}
三. 数据类型检测
3.1 typeof
虽然之前都用过很多次了,这里我再总结一下,有几个点要注意:
- NaN的数据类型是"number";
- 数组的数据类型是"object";
- 日期的数据类型是"object";
typeof "zevin" // 返回 "string"
typeof 3.14 // 返回 "number"
typeof NaN // 返回 "number"
typeof false // 返回 "boolean"
typeof [1,2,3,4] // 返回 "object"
typeof {name:'zevin', age:21} // 返回 "object"
typeof new Date() // 返回 "object"
typeof function () {} // 返回 "function"
typeof a // 返回 "undefined"
typeof null // 返回 "object"
3.2 isNaN
判断是否不是一个数字,不是数字,即为NaN,输出true。
var a = 10/'a';
console.log(a); //输出:NaN
console.log(typeof a); //输出:number
console.log(isNaN(a)); //输出:true
3.3 isFinite
判断是否是有效的数字,无穷就属于无效的数字。
var a = 10/0;
console.log(a); //输出:Infinity
console.log(typeof a); //输出:number
console.log(isFinite(a)); //输出:false
四. 数据类型转换
4.1 其他类型 --> Number
4.1.1 Number()
Number()函数也可以用来执行数据类型转换。
Number("123") // 123
Number("1.2222") // 1.2222
Number(null) // 0
Number('') // 0
Number('12asva') // NaN
Number('zevin') // NaN
Number()函数在对于null
,''空对象
和有非数字字符的字符串的转换和parseInt()函数是有区别的。
4.1.2 pasrseInt()
parseInt()函数可以将给定的字符串(string)以指定的基数(radix)解析为整数。
语法为:parseInt(string,radix)
第二个参数(radix)表示使用什么进制进行解析,当不指定第二个参数时,会默认以十进制解析字符串。当然我们可以指定二进制,八进制或者十六进制等等。
pasrseInt("123") // 123
pasrseInt("1.2222") // 1
pasrseInt(null) // NaN
pasrseInt('') // NaN
parseInt("19",10); //19 (10+9)
parseInt("11",2); // 3 (2+1)
parseInt("17",8); // 15 (8+7)
parseInt("1f",16); // 31 (16+15)
parseInt()函数从头解析string为整数,在遇到不能解析的字符时就返回已经解析的整数部分,如果第一个字符就不能解析,就直接返回NaN。
pasrseInt("abc123") // NaN
pasrseInt("123abc") // 123
pasrseInt(false) // NaN
4.1.3 一元加( + )/ 减( - )运算符
+3 // 3
+true // 1
+'2' // 1
+'a' // NaN
+null // 0
+undefined // NaN
+[] // 0
+{} // NaN
-3 // -3
-true // -1
-'2' // -2
-'a' // NaN
-null // -0
-undefined // NaN
-[] // -0
-{} // NaN
4.2 其他类型 --> String
4.2.1 String()
String(123) // '123'
String(false) // 'false'
4.2.2 toString()
false.toString() // 'false'
4.2.3 加( + )算数运算符
这个在下一篇中会详细讲解,现在你只需要知道,如果加运算的操作数中出现了字符串,那么加运算就执行的是字符串拼接运算。所以,我们可以在其他数据类型后加上一个空的字符串,就可以把它转换成字符类型。
123 + " " // '123'
4.3 其他类型 --> Boolean
4.3.1 Boolean()
Boolean('zevin') // true
Boolean(-123) // true
Boolean(null) // false
4.3.2 非( ! )运算符
var a; // undefined
!a // true
!!'hello' // true
!123 // false
!null // true