JavaScript数据类型
JavaScript的基本数据类型有数值型Number、字符串型String、布尔型Boolean以及两个特殊的数据类型undefined和null。
不可改变的
原始值(
栈数据)
|
引用值(
堆数据)
|
Number
|
array
|
String
|
object
|
Boolean
|
function
|
undefined
|
/
|
null
|
/
|
var arr1 = [1, 2];
var arr2 = arr1;
console.log(arr2); //打印结果: [1, 2]
arr1.push(3);
console.log(arr2); //打印结果: [1, 2, 3]
arr1 = [1,3];
console.log(arr2); //打印结果: [1, 2, 3]
数值型(number)是JavaScript中最基本的数据类型。JavaScript并不区分整形数值和浮点型数值,所有的数值都是由浮点型表示的。
浮点型数据(可以具有小数点)
(1)传统计数法
3.14 56.33
(2)科学计数法
3.12e11(3.12E11),就是3.12乘10的11次方。
特殊值infinity表示无穷大,-infinity表示无穷小。
(1/0结果为infinity,-1/0结果为-infinity)
特殊值NaN(Not a Number)表示非数字。
(0/0,结果为
NaN
)
字符串型(string)是JavaScript用来表示文本的数据类型。
在 JavaScript 中,字符串写在单引号或双引号中。
反斜杠是一个
转义字符
。 转义字符将特殊字符转换为字符串字符:
转义字符 (\) 可以用于转义撇号,换行,引号,等其他特殊字符。
下表中列举了在字符串中可以使用转义字符转义的特殊字符:
![](https://i-blog.csdnimg.cn/blog_migrate/d72f432fe53b3864c26645eac0e4c7e0.png)
转义字符“
\n”在
alert();语句中会产生换行,但是在
document.write();语句中使用转义字符时,只有将其放在格式化文本块中才会起作用,所以脚本必须放在
<pre>...</pre>的标记内。
document.write("<pre>");
document.write("轻松学习\nJavaScript语言");
document.write("</pre>");
布尔型(boolean)
布尔数据类型只有两个值;一个是true(真),一个是false(假)。
特殊数据类型(undefined和null)
(1)未定义值undefined,表示变量还没有赋值。
(2)关键字null,表示空值,用于定义空的或不存在的引用。
null与undefined的区别是
:null表示一个变量被赋予一个空值,而undefined则表示该变量尚未被赋值。
不同类型数据使用
typeof
运算符的返回值
typeof 能返回的六种数据类型(区分数字类型)number、string、boolean、undefined、object、function
数据类型
|
返回值
|
数值
|
number
|
字符串
|
string
|
布尔值
|
boolean
|
undefined
|
undefined
|
null
|
object
|
对象
|
object
|
函数
|
fuction
|
写成 console.log(typeof num); 也可以,不过最好加括号
var num = 123; console.log(typeof (num)); //返回 number
var num = {}; console.log(typeof (num)); //泛泛的引入值都返回 object
var num = []; console.log(typeof (num)); //泛泛的引入值都返回 object
var num = null; console.log(typeof (num)); //答案返回 object
var num = undefined; console.log(typeof (num)); //答案返回 undefined
var num = function () { }; console.log(typeof (num)); //答案返回 function
数据类型的转换规则
一、显示类型转换
(1)其他数据类型转换为数值型(Number)数据
类型
|
转换为数值型数据的结果
|
undefined
|
NaN
|
null
|
0
|
逻辑型
|
若其值为 true,则结果为 1;若其值为 false,则结果为 0
|
字符串型
|
若内容为数字,则结果为相应的数字,否则为 NaN
|
其他对象
|
NaN
|
var num = Number("123");
console.log(typeof(num) + ":" + num); //number:123,把字符串类型的 123 转换成了 number 类型
var demo = "123";
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:123,上面那一行的 Number 是为了把()里面转换成数字类型
var demo = true;
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:1
var demo = false;
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:0
var demo = null;
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:0
var demo = undefined;
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:NaN
var demo = "abc";
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:NaN
var demo = -123;
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:-123
var demo = "123abc";
var num = Number(demo);
console.log(typeof (num) + ":" + num); //答案显示 number:NaN
(2)其他数据类型转换为逻辑型(Boolean)数据
类型
|
转换为逻辑型数据的结果
|
undefined
|
false
|
null
|
false
|
逻辑型
|
若其值为 0 或 NaN,则结果为 false,否则为 true
|
字符串型
|
若其长度为 0 ,则结果为 false,否则为 true
|
其他对象
|
true
|
var demo = "";
var num = Boolean(demo);
console.log(typeof (num) + ":" + num); //答案显示 boolean:false
var demo = null;
var num = Boolean(demo);
console.log(typeof (num) + ":" + num); //答案显示 boolean:false
var demo = "abc";
var num = Boolean(demo);
console.log(typeof (num) + ":" + num); //答案显示 boolean:true
提示:(被认定为 false 的值)转换为布尔值结果为 false 的值有 undefined,null,NaN, ""(空串),0,false
(3)其他数据类型转换为字符串型(String)数据
类型
|
转换为字符串型数据的结果
|
undefined
|
undefined
|
null
|
null
|
逻辑型
|
NaN、0 或者与数值相对应的字符串
|
字符串型
|
若其值为 true,则结果为 true;若其值为 false,则结果为 false
|
其他对象
|
若存在,则其结果为 toString() 方法的值,否则其结果为 undefined
|
提示:String()转换成字符串,写什么都成了字符串
var demo = 123.234;
var num = String(demo);
console.log(typeof (num) + ":" + num); //答案显示 string: 123.234
var demo = undefined;
var num = String(demo);
console.log(typeof (num) + ":" + num); //答案显示 string: undefined
想把谁转换成字符串,就写成谁.toString(undefined 和 null 不能用 toString)
var demo = 123;
var num = demo.toString();
console.log(typeof (num) + ":" + num); //答案显示 string: 123。相当于把 123 转换字符串。
var demo = 123;
var num = demo.toString(8);
console.log(typeof (num) + ":" + num); //答案 173,把 123 转成为八进制
var demo = 20;
var num = demo.toString(8);
console.log(typeof (num) + ":" + num); //答案 24。以十进制为基底,把 20 转换成 8 进制,就是 24
二、隐式类型转换
隐式类型转换是跟你转换了也不知道,隐式类型转换内部隐式调用的是显示的方法 。
隐式类型转换包括
isNaN ()
,
++
,
--
,
+/-
(一元正负),
+
,
*
,
%
,
&&
,
||
,
!
,
<
,
>
,
<=
,
>=
,
==
,
!=
var a = "123"; a++;
console.log(a); //答案 124,++这个符号放到这里,还没运算之前,先把前面的 a 转换成number 的 123
var a = "abc"; a++; console.log(a); //答案 NaN
var a = +"abc";
console.log(a + ":" + typeof (a)); //答案 NaN:number。尽管转换不成数字,也会转换成数字类型,因为里面隐式的调用了一个 number
var a = 1 * "1";
console.log(typeof (a) + ":" + a); //答案 number:1
var a = "a" * 1;
console.log(typeof (a) + ":" + a); //答案 number:NaN, 先是 number(“a”)的结果乘以 number(1)的结果,最后是 NaN*1, 还是NaN,但是数据类型是 number
var num = 1 + "1"; console.log(num); //显示 11
var num = 1 * "1"; console.log(typeof (num) + ":" + num); //显示 number:1
var num = 1 - "1"; console.log(typeof (num) + ":" + num); //显示 number:0
var num = "2" - "1"; console.log(typeof (num) + ":" + num); //显示 number:1
var num = "2" * "3"; console.log(typeof (num) + ":" + num); //显示 number:6
var a = 1 + "1";
console.log(typeof (a) + ":" + a); //答案 string:11
//+隐式类型会转换成 string,当加号两侧有一个是字符串,就用调用 string,把两个都变成字符串
var a = 1 > "2";
console.log(typeof (a) + ":" + a); //答案 boolean:false , 有数字相比较的,就会隐士类型转换成数字类型
var a = "3" > 2;
console.log(typeof (a) + ":" + a); //答案 boolean:true , 会转换成数字,因为数字优先
var a = "3" > "2";
console.log(typeof (a) + ":" + a); //答案 boolean:true , 这个没类型转换,这个比的是ASCⅡ
var a = "1" == 1;
console.log(typeof (a) + ":" + a); //答案 boolean:true , 也有隐士类型转换
var a = 1 == true;
console.log(typeof (a) + ":" + a); //答案 boolean:true
在控制台操作
false > true //答案 false,会先转换成数字,0>1 当然是错的例
2>1>3 //答案 false
2 > 3 < 1 //答案 true
10 > 100 > 0 //答案 false
100 > 10 > 0 //答案 true
3 > 2 > 1 //答案 false
// 以上都是挨个算的,先看前面的是 true 还是 false,再和后面的比,不是顺着下来
undefined > 0 //答案 false
undefined == 0 //答案 false
undefined < 0 //答案 false
null > 0 //答案 false
null == 0 //答案 false
null < 0 //答案 false
undefined == null //答案 true
NaN == NaN //答案 false,NaN 是唯一一个连自己都不等于自己的
三、不发生类型转换
1 === 1 //答案 true
1 === "1" //答案 false
1 !== "1" //答案 true
1 !== 1 //答案 false
NaN = NaN //答案 false 特殊的
提示: console.log(a); 如果变量没定义就直接访问,就 a is not defined 报错; 有一种特殊情况,当且仅当把未定义的变量放到 console.log(typeof(a)); 里面就访问, 不报错,返回 undefined。
console.log(typeof (a)); //答案 undefined,这个 undefined 是字符串
console.log(typeof (typeof (a))); //答案 string
console.log(typeof(typeof(a))); 可以先解析成 console.log(typeof("undefined")); 再返回一次就是 string 字符串
实例练习
console.log(typeof (a)); //返回 undefined
console.log(typeof (undefined)); //返回 undefined
console.log(typeof (NaN)); //返回 number
console.log(typeof (null)); //返回 object
var a = "123abc"; //返回 string
console.log(typeof (+a)); //返回 number
console.log(typeof (!!a)); //返回 boolean
console.log(typeof (a + "")); //返回 string
console.log(1 == "1"); //显示 true
console.log(NaN == NaN); //显示 false
console.log(NaN == undefined); //显示 false
console.log("11" + 11); //显示 1111
console.log(1 === "1"); //显示 false
console.log(parseInt("123abc")); //显示 123 【parseInt 是截断数字】
console.log(typeof (typeof (a))); //返回 string
var num = 123123.345789; console.log(num.toFixed(3)); //答案 123123.346【toFixed(3)是保留三位小数的意思,四舍五入】