二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:JavaScript类型转换
Number() 转换为数字, String() 转换为字符串, Boolean() 转换为布尔.
JavaScript 数据类型
在JavaScript中有5种不同的数据类型可以包含的值有:
- string
- number
- boolean
- object
- function
有3种对象类型:
- Object
- Date
- Array
2个数据类型,不能包含值:
- null
- undefined
typeof 运算符
你可以使用typeof运算符来找到一个JavaScript变量的数据类型.
typeof "John" // Returns "string" typeof 3.14 // Returns "number" typeof NaN // Returns "number" typeof false // Returns "boolean" typeof [1,2,3,4] // Returns "object" typeof {name:'John', age:34} // Returns "object" typeof new Date() // Returns "object" typeof function () {} // Returns "function" typeof myCar // Returns "undefined" * typeof null // Returns "object"请注意:
- NaN 的数据类型是 number
- 数组的数据类型是 object
- 日期的数据类型是 object
- null 的数据类型是 object
- 未定义变量的数据类型是 undefined *
- 未赋值的变量的数据类型也未定义 *
你不能使用typeof来确定一个JavaScript数组和日期的类型.
typeof的数据类型
typeof 操作符不是一个变量. 它是一个操作符. 操作符 ( + - * / ) 没有任何数据类型.
但是,typeof 运算符总是返回包含操作数类型的字符串.
构造函数属性
构造函数属性返回所有JavaScript变量的构造函数.
"John".constructor // Returns "function String() { [native code] }" (3.14).constructor // Returns "function Number() { [native code] }" false.constructor // Returns "function Boolean() { [native code] }" [1,2,3,4].constructor // Returns "function Array() { [native code] }" {name:'John', age:34}.constructor // Returns" function Object() { [native code] }" new Date().constructor // Returns "function Date() { [native code] }" function () {}.constructor // Returns "function Function(){ [native code] }"您可以检查构造函数以查明对象是否为数组(包含“Array”):
构造函数属性返回所有JavaScript变量的构造函数.
function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
JavaScript 类型转换
JavaScript 变量可以被转换为新变量和其他数据类型:
- 通过使用JavaScript函数
- 自动转换
转换数字为字符串
全局方法String()能转换数字为字符串.
它可以用在任何类型的数字、常量、变量或表达式:
String(x) // returns a string from a number variable x String(123) // returns a string from a number literal 123 String(100 + 23) // returns a string from a number from an expressionNumber方法toString()也有相同的作用
x.toString() (123).toString() (100 + 23).toString()在Number一章中, 你会发现更多的方法可以用来将数字转换为字符串:
方法 描述 toExponential() 返回一个字符串,用一个数字舍入并用指数符号书写. toFixed() 返回一个字符串,用一个数字舍入并用小数书写. toPrecision() 返回具有指定长度的数字的字符串
将布尔值的字符串
全局方法String()可以将布尔转换成字符串.
String(false) // returns "false" String(true) // returns "true"Boolean方法toString()也有相同的作用
false.toString() // returns "false" true.toString() // returns "true"
将日期转换为字符串
全局方法String()可以将日期转换成字符串.
String(Date()) // returns "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"Date方法toString()也有相同的作用
Date().toString() // returns "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"在日期一章里, 你会发现更多的方法,可以用来转换日期字符串:
方法 描述 getDate() 获得月里的一天(1-31) getDay() 获得周里的一天 (0-6) getFullYear() 获得4为数字的年 (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") // returns 3.14 Number(" ") // returns 0 Number("") // returns 0 Number("99 88") // returns NaN在Number一章里, 你会发现更多的方法,可以用来转换字符串到数字:
方法 描述 parseFloat() 将一个字符串转换为一个浮点数 parseInt() 将一个字符串转换为一个整数
一元 + 操作符
一元 + 操作符将一个变量转换为数字:
var y = "5"; // y is a string var x = + y; // x is a number如果变量不能被转换,它仍然会成为一个数字, 但是他的值是 NaN (Not a number):
var y = "John"; // y is a string var x = + y; // x is a number (NaN)
将布尔转换为数字
全局方法Number()能将布尔转换为数字.
Number(false) // returns 0 Number(true) // returns 1
将日期转换为数字
全局方法 Number() 可用于将日期转换为数字.
d = new Date(); Number(d) // returns 1404568027739日期方法getTime() 有同样的效果.
d = new Date(); d.getTime() // returns 1404568027739
自动类型转换
当JavaScript试图操作“错误”的数据类型时,它将值转换为一个“正确”的类型.
结果并不总是你所期望的:
5 + null // returns 5 because null is converted to 0 "5" + null // returns "5null" because null is converted to "null" "5" + 2 // returns 52 because 2 is converted to "2" "5" - 2 // returns 3 because "5" is converted to 5 "5" * "2" // returns 10 because "5" and "2" are converted to 5 and 2
自动字符串转换
JavaScript自动调用变量的toString()函数当你试图“输出”的一个对象或变量:
document.getElementById("demo").innerHTML = myVar; // if myVar = {name:"Fjohn"} // toString converts to "[object Object]" // if myVar = [1,2,3,4] // toString converts to "1,2,3,4" // if myVar = new Date() // toString converts to "Fri Jul 18 2014 09:08:55 GMT+0200"数字和布尔值进行转换,但这是不可见的:
// if myVar = 123 // toString converts to "123" // if myVar = true // toString converts to "true" // if myVar = false // toString converts to "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 让我试试 引号中的值指示字符串值.