松软科技Web课堂:JavaScript 类型转换
number() 转换数值,string() 转换字符串,boolean() 转换布尔值。
javascript 数据类型
javascript 中有五种可包含值的数据类型:
- 字符串(string)
- 数字(number)
- 布尔(boolean)
- 对象(object)
- 函数(function)
有三种对象类型:
- 对象(object)
- 日期(date)
- 数组(array)
同时有两种不能包含值的数据类型:
- null
- undefined
typeof 运算符
您可以使用 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 运算符不是变量。它属于运算符。运算符(比如 + - * /)没有数据类型。
但是,typeof 始终会返回字符串(包含运算数的类型)。
constructor 属性
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 类型转换
javascript 变量能够被转换为新变量以及另一种数据类型:
- 通过使用 javascript 函数
- 通过 javascript 本身自动转换
把数值转换为字符串
全局方法 string() 能够把数字转换为字符串。
它可用于任意类型的数字、文字、变量或表达式:
实例
string(x) // 从数值变量 x 返回字符串 string(123) // 从数值文本 123 返回字符串 string(100 + 23) // 从表达式中的数值返回字符串
数字方法 tostring() 同理。
实例
x.tostring() (123).tostring() (100 + 23).tostring()
方法 | 描述 |
---|---|
toexponential() | 返回字符串,对数字进行舍入,并使用指数计数法来写。 |
tofixed() | 返回字符串,对数字进行舍入,并使用指定位数的小数来写。 |
toprecision() | 返回字符串,把数字写为指定的长度。 |
把布尔转换为字符串
全局方法 string() 能够将布尔转换为字符串。
string(false) // 返回 "false" string(true) // 返回 "true"
布尔方法 tostring() 同理。
false.tostring() // 返回 "false" true.tostring() // 返回 "true"
把日期转换为字符串
全局方法 string() 可将日期转换为字符串。
string(date()) // 返回 "fri dec 13 2019 09:48:21 gmt+0800 (中国标准时间)"
日期方法 tostring() 同理。
实例
date().tostring() // 返回 "fri dec 13 2019 09:48:21 gmt+0800 (中国标准时间)"
方法 | 描述 |
---|---|
getdate() | 获得以数值计(1-31)的日 |
getday() | 或者以数值计(0-6)的周 |
getfullyear() | 获得四位的年(yyyy) |
gethours() | 获得时(0-23) |
getmilliseconds() | 获得毫秒(0-999) |
getminutes() | 获得分钟(0-59) |
getmonth() | 获得月(0-11) |
getseconds() | 获得秒(0-59) |
gettime() | 获得时间(1970 年 1 月 1 日以来的毫秒) |
把字符串转换为数值
全局方法 number() 可把字符串转换为数字。
包含数字的字符串(比如 "3.14")转换为数字(比如 3.14)。
空的字符串转换为 0。
其他字符串将转换为 nan(not a number,不是数字)。
number("3.14") // 返回 3.14 number(" ") // 返回 0 number("") // 返回 0 number("99 88") // 返回 nan
方法 | 描述 |
---|---|
parsefloat() | 解析字符串并返回浮点数。 |
parseint() | 解析字符串并返回整数。 |
一元 + 运算符
一元的 + 运算符可用于把变量转换为数字:
实例
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) // 返回 1576201701989
日期方法 gettime() 同理。
d = new date(); d.gettime() // 返回 1576201701992,时间戳
自动类型转换
如果 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 转换为 "fri dec 13 2019 09:48:21 gmt+0800 (中国标准时间)"
数字和布尔也会被转换,但并不明显:
// 如果 myvar = 123 // tostring 转换为 "123" // 如果 myvar = true // tostring 转换为 "true" // 如果 myvar = false // tostring 转换为 "false"
javascript 类型转换表
下表中列出了将不同 javascript 值转换为数字、字符串和布尔的结果:
原始值 | 转换为数字 | 转换为字符串 | 转换为逻辑 |
---|---|---|---|
false | 0 | "false" | false |
true | 1 | "true" | true |
0 | 0 | "0" | false |
1 | 1 | "1" | true |
"0" | 0 | "0" | true |
"000" | 0 | "000" | true |
"1" | 1 | "1" | true |
nan | nan | "nan" | false |
infinity | infinity | "infinity" | true |
-infinity | -infinity | "-infinity" | true |
"" | 0 | "" | false |
"20" | 20 | "20" | true |
"twenty" | nan | "twenty" | true |
[ ] | 0 | "" | true |
[20] | 20 | "20" | true |
[10,20] | nan | "10,20" | true |
["twenty"] | nan | "twenty" | true |
["ten","twenty"] | nan | "ten,twenty" | true |
function(){} | nan | "function(){}" | true |
{ } | nan | "[object object]" | true |
null | 0 | "null" | false |
undefined | nan | "undefined" | false |