Number() 转换数值,String() 转换字符串,Boolean() 转换布尔值。
JavaScript 中有五种可包含值的数据类型:
有三种对象类型:
同时有两种不能包含值的数据类型:
可以使用 typeof
运算符来确定 JavaScript 变量的数据类型。
typeof "Bill" // 返回 "string"
typeof 3.14 // 返回 "number"
typeof NaN // 返回 "number"
typeof false // 返回 "boolean"
typeof [1,2,3,4] // 返回 "object"
typeof {name:'Bill', age:62} // 返回 "object"
typeof new Date() // 返回 "object"
typeof function () {} // 返回 "function"
typeof myCar // 返回 "undefined" *
typeof null // 返回 "object"
注意:
- NaN 的数据类型是数值
- 数组的数据类型是对象
- 日期的数据类型是对象
- null 的数据类型是对象
- 未定义变量的数据类型是 undefined
- 尚未赋值的变量的数据类型也是 undefined
无法使用
typeof
去判断 JavaScript 对象是否是数组(或日期)。
typeof
运算符不是变量。它属于运算符。运算符(比如 +
-
*
/
)没有数据类型。
但是,typeof
始终会返回字符串(包含运算数的类型)。
constructor
属性返回所有 JavaScript 变量的构造器函数。
"Bill".constructor // 返回 "function String() { [native code] }"
(3.14).constructor // 返回 "function Number() { [native code] }"
false.constructor // 返回 "function Boolean() { [native code] }"
[1,2,3,4].constructor // 返回 "function Array() { [native code] }"
{name:'Bill', age:62}.constructor // 返回" function Object() { [native code] }"
new Date().constructor // 返回 "function Date() { [native code] }"
function () {}.constructor // 返回 "function Function(){ [native code] }"
可以通过检查 constructor
属性来确定某个对象是否为数组(包含单词 “Array”):
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
或者更简单,可以检查对象是否是数组函数:
function isArray(myArray) {
return myArray.constructor === Array;
}
可以通过检查 constructor
属性来确定某个对象是否为日期(包含单词 “Date”):
function isDate(myDate) {
return myDate.constructor.toString().indexOf("Date") > -1;
}
或者更简单,可以检查对象是否是日期函数:
function isDate(myDate) {
return myDate.constructor === Date;
}
JavaScript 变量能够被转换为新变量以及另一种数据类型:
全局方法 String()
能够把数字转换为字符串。
它可用于任意类型的数字、文字、变量或表达式:
String(x) // 从数值变量 x 返回字符串
String(123) // 从数值文本 123 返回字符串
String(100 + 23) // 从表达式中的数值返回字符串
数字方法 toString()
同理。
x.toString()
(123).toString()
(100 + 23).toString()
数字方法:
全局方法 String()
能够将布尔转换为字符串。
String(false) // 返回 "false"
String(true) // 返回 "true"
布尔方法 toString()
同理。
false.toString() // 返回 "false"
true.toString() // 返回 "true"
全局方法 String()
可将日期转换为字符串。
String(Date()) "demo1">// 返回 "Thu Sep 29 2022 18:15:15 GMT+0800 (中国标准时间)"
日期方法 toString()
同理。
Date().toString() "demo2">// 返回 "Thu Sep 29 2022 18:15:15 GMT+0800 (中国标准时间)"
日期方法:
全局方法 Number()
可把字符串转换为数字。
包含数字的字符串(比如 “3.14”)转换为数字(比如 3.14)。
空的字符串转换为 0。
其他字符串将转换为 NaN
(Not a number,不是数字)。
Number("3.14") // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
数字方法:
一元的 + 运算符可用于:
var y = "5"; // y 是字符串
var x = + y; // x 是数字
如果无法转换变量,则仍会成为数字,但是值为 NaN
(Not a number):
var y = "Bill"; // y 是字符串
var x = + y; // x 是数字 (NaN)
全局方法 Number()
也可把布尔转换为数字。
Number(false) // 返回 0
Number(true) // 返回 1
全局方法 Number()
可用于把日期转换为数字。
d = new Date();
Number(d) "demo3">// 返回 1664446515598
日期方法 getTime()
同理。
d = new Date();
d.getTime() "demo4">// 返回 1664446515598
如果 JavaScript 尝试操作一种“错误”的数据类型,它会试图将该值转换为“正确”的类型。
结果并不总是你所期望的:
5 + null // 返回 5 因为 null 被转换为 0
"5" + null // 返回 "5null" 因为 null 被转换为 "null"
"5" + 2 // 返回 52 因为 2 被转换为 "2"
"5" - 2 // 返回 3 因为 "5" 被转换为 5
"5" * "2" // 返回 10 因为 "5" 和 "2" 被转换为 5 和 2
JavaScript 自动调用变量的 toString()
函数,当试图“输出”对象或变量时:
document.getElementById("demo").innerHTML = myVar;
// 如果 myVar = {name:"Fjohn"} // toString 转换为 "[object Object]"
// 如果 myVar = [1,2,3,4] // toString 转换为 "1,2,3,4"
// 如果 myVar = new Date() // toString 转换为 "Thu Sep 29 2022 18:15:15 GMT+0800 (中国标准时间)"
数字和布尔也会被转换,但并不明显:
// 如果 myVar = 123 // toString 转换为 "123"
// 如果 myVar = true // toString 转换为 "true"
// 如果 myVar = false // toString 转换为 "false"
引号中的值指示字符串值。
红色的值指示了(某些)程序员也许不希望的值。