JavaScript 数据类型转换
-
JavaScript数据类型
在JavaScript中,有5种不同的数据类型可以包含值:- string
- number
- boolean
- object
- function
有3种类型的对象:- Object
- Date
- Array
2种不能包含值的数据类型:- null
- undefined
-
操作符的类型
您可以使用typeof运算符查找JavaScript变量的数据类型。语法:
尝试一下typeof "John" // 返回 "string" typeof 3.14 // 返回 "number" typeof NaN // 返回 "number" typeof false // 返回 "boolean" typeof [1,2,3,4] // 返回 "object" typeof {name:'John', age:34} // 返回 "object" typeof new Date() // 返回 "object" typeof function () {} // 返回 "function" typeof myCar // 返回 "undefined" * typeof null // 返回 "object"
请注意:- NaN的数据类型是数字
- 数组的数据类型是object
- 日期的数据类型是object
- null的数据类型是object
- 未定义的变量的数据类型undefine *
- 尚未赋值的变量的数据类型也undefine *
您不能typeof用来确定JavaScript对象是否是数组(或日期)。
-
typeof的数据类型
typeof操作符不是一个变量。这是一个运算符。运算符(+ - * /)没有任何数据类型。但是,typeof运算符(包含操作数的类型)总是返回一个字符串。 -
constructor属性
constructor属性返回JavaScript变量所有的构造函数。
尝试一下"John".constructor // 返回函数 String() {[native code]} (3.14).constructor // 返回函数 Number() {[native code]} false.constructor // 返回函数 Boolean() {[native code]} [1,2,3,4].constructor // 返回函数 Array() {[native code]} {name:'John',age:34}.constructor // 返回函数 Object() {[native code]} new Date().constructor // 返回函数 Date() {[native code]} function () {}.constructor // 返回函数 Function(){[native code]}
-
constructor属性
constructor属性返回JavaScript变量所有的构造函数。
尝试一下"John".constructor // 返回函数 String() {[native code]} (3.14).constructor // 返回函数 Number() {[native code]} false.constructor // 返回函数 Boolean() {[native code]} [1,2,3,4].constructor // 返回函数 Array() {[native code]} {name:'John',age:34}.constructor // 返回函数 Object() {[native code]} new Date().constructor // 返回函数 Date() {[native code]} function () {}.constructor // 返回函数 Function(){[native code]}
您可以检查构造函数属性以查明对象是否为Array (包含单词“Array”):
尝试一下function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
或者甚至更简单,您可以检查对象是否是数组函数:
尝试一下function isArray(myArray) { return myArray.constructor === Array; }
您可以检查constructor属性以查明对象是否为 Date(包含单词“Date”):
尝试一下function isDate(myDate) { return myDate.constructor.toString().indexOf("Date") > -1; }
或者甚至更简单,您可以检查对象是否是Date函数:
尝试一下function isDate(myDate) { return myDate.constructor === Date; }
-
constructor属性
JavaScript变量可以转换为新变量和另一种数据类型:- 通过使用JavaScript函数
- 由JavaScript本身自动完成
-
将数字转换为字符串
全局方法String()可以将数字转换为字符串。它可以用于任何类型的数字,文字,变量或表达式:- 通过使用JavaScript函数
- 由JavaScript本身自动完成
尝试一下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()) // 返回 "Thu Jul 17 2018 15:38:19 GMT+0200 (W.欧洲夏令时)"
toString()也是如此。Date().toString() // returns "Thu Jul 17 2014 15:38:19 GMT+0200 (W.欧洲夏令时)"
在日期方法一章中,您将找到更多可用于将日期转换为字符串的方法: -
将字符串转换为数字
全局方法Number()可以将字符串转换为数字。包含数字的字符串(如“3.14”)将转换为数字(如3.14)。空字符串转换为0。其他任何东西都转换为NaN(Not a Number)。Number("3.14") // 返回 3.14 Number(" ") // 返回 0 Number("") // 返回 0 Number("99 88") // 返回 NaN
在数字方法一章中,您将找到更多可用于将字符串转换为数字的方法 -
-
将布尔值转换为数字
全局方法Number()还可以将布尔值转换为数字。Number(false) // 返回 0 Number(true) // 返回 1
-
将日期转换为数字
全局方法Number()可用于将日期转换为数字。d = new Date(); Number(d) // 返回 1404568027739
日期方法getTime()也是如此。d = new Date(); d.getTime() // 返回 1404568027739
-
自动类型转换
当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
日期方法getTime()也是如此。
尝试一下d = new Date(); d.getTime() // 返回 1404568027739
-
自动字符串转换
当您尝试“输出”对象或变量时,JavaScript会自动调用变量的函数toString():document.getElementById("demo").innerHTML = myVar; // if myVar = {name:"Fjohn"} // toString转换为“[object Object]” // if myVar = [1,2,3,4] // toString转换为“1,2,3,4” // if myVar = new Date() // toString将转换为“Fri Jul 18 2018 09:08:55 GMT+0200”
数字和布尔值也被转换,但这不是很明显:// if myVar = 123 // toString 转换为 "123" // if myVar = true // toString 转换为 "true" // if myVar = false // toString 转换为 "false"
-
一些令人迷糊的转换结果
原始值 转换为数字 转换为字符串 转换为布尔 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