欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【JavaScript学习笔记】6:数据类型,object类型及其判定,常用类型转换

程序员文章站 2024-03-13 12:36:45
...

数据类型和object类型

js数据类型只有5种(number数字类型,string字符串类型,boolean布尔类型,object对象类型,function函数类型)。所谓js数据类型即是用typeof运算符得到的结果。

而前面说的Array是属于object类型的,object类型包含了Array数组,Date日期和Object对象共三种对象类型。
【JavaScript学习笔记】6:数据类型,object类型及其判定,常用类型转换

判定具体的object类型

用typeof关键字只能判定变量属于哪个数据类型,如果变量是一个Array,typeof的结果只能精确到object。

构造器转字符串做模式匹配

若想得知具体是哪种object,可以查看变量的constructor属性,即其构造方法:

a=[1,"2",3.5];
Array [ 1, "2", 3.5 ]
a.constructor;
function Array()
a.constructor.toString();
"function Array() {
    [native code]
}"
a.constructor.toString().indexOf("Array");
9

菜鸟教程上用这种有点暴力的方式来判断一个变量是否是Array,确实只要判断其构造器转为字符串后是否含有”Array”字样就可以了,即用indexOf()查找”Array”的下标是否大于-1。

使用instanceof运算符

js里也有instanceof运算符,用这个就不用那么暴力的方式判断具体的object类型了:

a=[1,2,"ok",9];
Array [ 1, 2, "ok", 9 ]
a instanceof Array;
true

常用类型转换

注意类型转换时,用到的单词首字母是大写的,而不是像typeof关键字那样得到的全小写字母。

Number转String

a=3.14;
3.14
String(a);
"3.14"
a.toString();
"3.14"

有关Boolean的转换

a=true;
true
String(a);
"true"
a.toString();
"true"
Number(a);
1
a=1;
1
Boolean(a);
true

Date和字符串的转换

Date()返回的是当前时间的字符串,而new Date()则是当前时间的Date对象:

new Date();
Date 2018-02-08T05:04:39.882Z
typeof new Date();
"object"
Date();
"Thu Feb 08 2018 13:04:58 GMT+0800"
typeof Date();
"string"

从字符串中解析数字

从字符串中解析数字有些技巧,如果字符串能表示合法的数字,可以直接强制转换:

a="3.14";
"3.14"
Number(a);
3.14

但如果不是,强制转换会失效,返回NaN:

a="3.14s15";
"3.14s15"
Number(a);
NaN

这时候可以采取一些特殊的函数:

parseFloat(a);
3.14
parseInt(a);
3

它会尽可能的把前面正确的那部分转换过来,但如果最前面就不对,那就没办法了:

a="s3.14";
"s3.14"
parseFloat(a);
NaN

Date和数字的转换

有时候把Date转换成数字,能方便进行计算:

a=new Date();
Date 2018-02-08T05:13:53.477Z
Number(a);
1518066833477
a.getTime();
1518066833477
a.getDate();
8
a.getDay();
4
a.getFullYear();
2018
a.getHours();
13
a.getMilliseconds();
477
a.getMinutes();
13
a.getMonth();
1
a.getSeconds();
53

单目+运算符

可以把变量转换成数字:

a="3.14";
"3.14"
+a;
3.14
a=new Date();
Date 2018-02-08T05:18:17.119Z
+a;
1518067097119

不过感觉还是前面的方法易读性好一些。

自动转换和自动toString()

加号和减号还一样,加号倾向于字符串拼接:

a="3.14";
"3.14"
a+12;
"3.1412"
a-12;
-8.86
a-"12";
-8.86

自动toString()和Java里的syso类似,当尝试输出一个变量的时候,就会去隐式调用其toString()方法:

a={name:"lzh",age:20};
Object { name: "lzh", age: 20 }
document.write(a);
undefined

在页面上打印出的是:

[object Object]

这是因为:

a.toString();
"[object Object]"

当然,自动toString()不会发生在控制台输出时!否则还调试个毛:

console.log(a);
Object { name: "lzh", age: 20 }