【JavaScript学习笔记】6:数据类型,object类型及其判定,常用类型转换
数据类型和object类型
js数据类型只有5种(number数字类型,string字符串类型,boolean布尔类型,object对象类型,function函数类型)。所谓js数据类型即是用typeof运算符得到的结果。
而前面说的Array是属于object类型的,object类型包含了Array数组,Date日期和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 }
上一篇: 纯C实现员工工资管理系统