JavaScript 类型转�
Number() 转æ�¢ä¸ºæ•°å—, String() 转æ�¢ä¸ºå—符串, Boolean() 转æ�¢ä¸ºå¸ƒå°”值。
JavaScript 数�类型
在 JavaScript 䏿œ‰ 6 ç§�ä¸�å�Œçš„æ•°æ�®ç±»åž‹ï¼š
- string
- number
- boolean
- object
- function
- symbol
3 �对象类型:
- Object
- Date
- Array
2 个�包�任何值的数�类型:
- null
- undefined
typeof �作符
ä½ å�¯ä»¥ä½¿ç”¨ typeof æ“�作符æ�¥æŸ¥çœ‹ JavaScript å�˜é‡�的数æ�®ç±»åž‹ã€‚
实例
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 (如果 myCar 没有声明)
typeof null // 返回 object
�试一下 »
请注�:
- NaN 的数�类型是 number
- 数组(Array)的数�类型是 object
- 日期(Date)的数�类型为 object
- null 的数�类型是 object
- 未定义��的数�类型为 undefined
如果对象是 JavaScript Array 或 JavaScript Date ï¼Œæˆ‘ä»¬å°±æ— æ³•é€šè¿‡ typeof æ�¥åˆ¤æ–ä»–ä»¬çš„ç±»åž‹ï¼Œå› ä¸ºéƒ½æ˜¯ 返回 object。
constructor 属性
constructor 属性返回所有 JavaScript å�˜é‡�çš„æž„é€ å‡½æ•°ã€‚
实例
(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 属性æ�¥æŸ¥çœ‹å¯¹è±¡æ˜¯å�¦ä¸ºæ•°ç»„ (包å�«å—符串 "Array"):
实例
return myArray.constructor.toString().indexOf("Array") > -1;
}
�试一下 »
ä½ å�¯ä»¥ä½¿ç”¨ constructor 属性æ�¥æŸ¥çœ‹å¯¹è±¡æ˜¯å�¦ä¸ºæ—¥æœŸ (包å�«å—符串 "Date"):
实例
return myDate.constructor.toString().indexOf("Date") > -1;
}
�试一下 »
JavaScript 类型转�
JavaScript ���以转�为新��或其他数�类型:
- 通过使用 JavaScript 函数
- 通过 JavaScript 自身自动转�
将数å—转æ�¢ä¸ºå—符串
全局方法 String() å�¯ä»¥å°†æ•°å—转æ�¢ä¸ºå—符串。
该方法å�¯ç”¨äºŽä»»ä½•类型的数å—ï¼Œå—æ¯�,å�˜é‡�,表达å¼�:
实例
String(123) // å°†æ•°å— 123 转æ�¢ä¸ºå—符串并返回
String(100 + 23) // 将数å—表达å¼�转æ�¢ä¸ºå—符串并返回
�试一下 »
Number 方法 toString() 也是有å�Œæ ·çš„æ•ˆæžœã€‚
在 Number 方法 ç« èŠ‚ä¸ï¼Œä½ å�¯ä»¥æ‰¾åˆ°æ›´å¤šæ•°å—转æ�¢ä¸ºå—符串的方法:
| 方法 | �述 |
|---|---|
| toExponential() | 把对象的值转�为指数计数法。 |
| toFixed() | 把数å—转æ�¢ä¸ºå—符串,结果的å°�数点å�Žæœ‰æŒ‡å®šä½�数的数å—。 |
| toPrecision() | æŠŠæ•°å—æ ¼å¼�化为指定的长度。 |
将布尔值转æ�¢ä¸ºå—符串
全局方法 String() å�¯ä»¥å°†å¸ƒå°”值转æ�¢ä¸ºå—符串。
String(true) // 返回 "true"
Boolean 方法 toString() 也有相�的效果。
true.toString() // 返回 "true"
将日期转æ�¢ä¸ºå—符串
Date() 返回å—符串。
全局方法 String() å�¯ä»¥å°†æ—¥æœŸå¯¹è±¡è½¬æ�¢ä¸ºå—符串。
Date 方法 toString() 也有相�的效果。
实例
obj.toString() // 返回 Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)
在 Date 方法 ç« èŠ‚ä¸ï¼Œä½ å�¯ä»¥æŸ¥çœ‹æ›´å¤šå…³äºŽæ—¥æœŸè½¬æ�¢ä¸ºå—符串的函数:
| 方法 | �述 |
|---|---|
| getDate() | 从 Date 对象返回一个月ä¸çš„æŸ�一天 (1 ~ 31)。 |
| getDay() | 从 Date 对象返回一周ä¸çš„æŸ�一天 (0 ~ 6)。 |
| getFullYear() | 从 Date 对象以四ä½�æ•°å—返回年份。 |
| getHours() | 返回 Date 对象的�时 (0 ~ 23)。 |
| getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999)。 |
| getMinutes() | 返回 Date 对象的分钟 (0 ~ 59)。 |
| getMonth() | 从 Date 对象返回月份 (0 ~ 11)。 |
| getSeconds() | 返回 Date 对象的秒数 (0 ~ 59)。 |
| getTime() | 返回 1970 年 1 月 1 日至今的毫秒数。 |
å°†å—符串转æ�¢ä¸ºæ•°å—
全局方法 Number() å�¯ä»¥å°†å—符串转æ�¢ä¸ºæ•°å—。
å—符串包å�«æ•°å—(如 "3.14") 转æ�¢ä¸ºæ•°å— (如 3.14).
空å—符串转æ�¢ä¸º 0。
å…¶ä»–çš„å—符串会转æ�¢ä¸º NaN (ä¸�是个数å—)。
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
在 Number 方法 ç« èŠ‚ä¸ï¼Œä½ å�¯ä»¥æŸ¥çœ‹åˆ°æ›´å¤šå…³äºŽå—符串转为数å—的方法:
| 方法 | �述 |
|---|---|
| parseFloat() | è§£æž�一个å—符串,并返回一个浮点数。 |
| parseInt() | è§£æž�一个å—符串,并返回一个整数。 |
一元�算符 +
Operator + å�¯ç”¨äºŽå°†å�˜é‡�转æ�¢ä¸ºæ•°å—:
如果å�˜é‡�ä¸�能转æ�¢ï¼Œå®ƒä»�然会是一个数å—,但值为 NaN (ä¸�是一个数å—):
实例
var x = + y; // x æ˜¯ä¸€ä¸ªæ•°å— (NaN)
�试一下 »
将布尔值转æ�¢ä¸ºæ•°å—
全局方法 Number() å�¯å°†å¸ƒå°”值转æ�¢ä¸ºæ•°å—。
Number(true) // 返回 1
将日期转æ�¢ä¸ºæ•°å—
全局方法 Number() å�¯å°†æ—¥æœŸè½¬æ�¢ä¸ºæ•°å—。
Number(d) // 返回 1404568027739
日期方法 getTime() 也有相�的效果。
d.getTime() // 返回 1404568027739
自动转�类型
当 JavaScript å°�试æ“�作一个 "错误" 的数æ�®ç±»åž‹æ—¶ï¼Œä¼šè‡ªåŠ¨è½¬æ�¢ä¸º "æ£ç¡®" 的数æ�®ç±»åž‹ã€‚
以下输出结果ä¸�æ˜¯ä½ æ‰€æœŸæœ›çš„ï¼š
"5" + null // 返回"5null" null 转�为 "null"
"5" + 1 // 返回 "51" 1 转�为 "1"
"5" - 1 // 返回 4 "5" 转�为 5
自动转æ�¢ä¸ºå—符串
å½“ä½ å°�试输出一个对象或一个å�˜é‡�æ—¶ JavaScript 会自动调用å�˜é‡�çš„ toString() 方法:
myVar = {name:"Fjohn"} // toString 转�为 "[object Object]"
myVar = [1,2,3,4] // toString 转�为 "1,2,3,4"
myVar = new Date() // toString 转�为 "Fri Jul 18 2014 09:08:55 GMT+0200"
æ•°å—和布尔值也ç»�常相互转æ�¢ï¼š
myVar = true // toString 转�为 "true"
myVar = false // toString 转�为 "false"
下表展示了使用ä¸�å�Œçš„æ•°å€¼è½¬æ�¢ä¸ºæ•°å—(Number), å—符串(String), 布尔值(Boolean):
| 原始值 | 转æ�¢ä¸ºæ•°å— | 转æ�¢ä¸ºå—符串 | 转æ�¢ä¸ºå¸ƒå°”值 | 实例 |
|---|---|---|---|---|
| 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 | �试一下 » |
| "Runoob" | NaN | "Runoob" | true | �试一下 » |
| [ ] | 0 | "" | true | �试一下 » |
| [20] | 20 | "20" | true | �试一下 » |
| [10,20] | NaN | "10,20" | true | �试一下 » |
| ["Runoob"] | NaN | "Runoob" | true | �试一下 » |
| ["Runoob","Google"] | NaN | "Runoob,Google" | true | �试一下 » |
| function(){} | NaN | "function(){}" | true | �试一下 » |
| { } | NaN | "[object Object]" | true | �试一下 » |
| null | 0 | "null" | false | �试一下 » |
| undefined | NaN | "undefined" | false | �试一下 » |
夜尽
972***483@qq.com
检测数�类型:typeof 与 instanceof
typeof
typeof 用以获å�–一个å�˜é‡�或者表达å¼�的类型,typeof 一般å�ªèƒ½è¿”å›žå¦‚ä¸‹å‡ ä¸ªç»“æžœï¼š
实例:
document.getElementById("demo").innerHTML = typeof "john" + "<br>" + typeof 3.14 + "<br>" + typeof false + "<br>" + typeof [1,2,3,4] + "<br>" + typeof {name:'john', age:34};�试一下 »
我们å�¯ä»¥ä½¿ç”¨ typeof æ�¥èŽ·å�–一个å�˜é‡�是å�¦å˜åœ¨ï¼Œå¦‚ if(typeof a!="undefined"){},而ä¸�è¦�去使用 if(a) å› ä¸ºå¦‚æžœ a ä¸�å˜åœ¨ï¼ˆæœªå£°æ˜Žï¼‰åˆ™ä¼šå‡ºé”™ã€‚
æ£å› 为 typeof é�‡åˆ° null,数组,对象时都会返回 object 类型,所以当我们è¦�判æ–一个对象是å�¦æ˜¯æ•°ç»„时。
æˆ–è€…åˆ¤æ–æŸ�个å�˜é‡�是å�¦æ˜¯æŸ�个对象的实例则è¦�选择使用å�¦ä¸€ä¸ªå…³é”®è¯æ³• instanceof
。instanceof
å�¯é€šè¿‡ instanceof æ“�作符æ�¥åˆ¤æ–å¯¹è±¡çš„å…·ä½“ç±»åž‹ï¼Œè¯æ³•æ ¼å¼�:
返回布尔值,如果是指定类型返回 true,�则返回 false:
例:
arr = [1,2,3]; if(arr instanceof Array){ document.write("arr 是一个数组"); } else { document.write("arr �是一个数组"); }�试一下 »
夜尽
972***483@qq.com
Endl
313***2538@qq.com
undefined 与 null 的区别:
表é�¢ä¸Š undefined 与 null 都是什么都没有的æ„�æ€�,但是实际上 undefined 是未定义(就是å�˜é‡�没有åˆ�始化),null 是一个å�˜é‡�åˆ�始化了,但是什么值都没给,å�ªç»™äº†ä¸€ä¸ªç©ºå¯¹è±¡ï¼›è¿›ä¸€æ¥è¯´ï¼Œundefined 与 null是值相ç‰ï¼Œç±»åž‹ä¸�相ç‰ã€‚
Endl
313***2538@qq.com
Arcy
hen***55@163.com
NaN 是一个特殊的数值,NaN ��数值(Not a Number),这个数值用于本��返回数值的�作数未返回数值的情况。
NaN 与任何值都ä¸�相ç‰ï¼ŒåŒ…括 NaN 本身。
å�¯ä»¥é€šè¿‡ isNaN() 方法æ�¥åˆ¤æ–æŸ�个数值是å�¦æ˜¯NaN这个特殊的数,使用 isNaN() æ–¹æ³•ä¼šå°†ä¼ å…¥çš„æ•°å€¼å¦‚æžœæ˜¯é�žæ•°å€¼çš„会将其自动转æ�¢æˆ�数值类型,若能转æ�¢æˆ�数值类型,那么这个函数返回 false,若ä¸�能转æ�¢æˆ�数值类型,则这个数就是 NaN,å�³è¿”回 true。
Arcy
hen***55@163.com
æ¸�æ¼
763***666@qq.com
�考地�
åˆ¤æ–æ˜¯å�¦ä¸ºæ•°ç»„。
<p id="demo"></p> <script> var fruits = ["Banana", "Orange", "Apple", "Mango"]; document.getElementById("demo").innerHTML = isArray(fruits); function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; } </script>return myArray.constructor.toString().indexOf("Array") > -1;这��怎么解释?
1ã€�myArray 是函数 isArray çš„å�‚æ•°ï¼Œè¿™é‡Œè°ƒç”¨å‡½æ•°çš„æ—¶å€™ï¼Œä¼šä¼ æ�¥æ•°ç»„ fruits。
2ã€�constructor æ˜¯ä¸€ä¸ªå±žæ€§ï¼Œæž„é€ å‡½æ•°å±žæ€§ï¼Œä¸�å�Œç±»åž‹çš„æ•°æ�®ï¼Œä¼šå¾—到相应ä¸�å�Œçš„å€¼ã€‚å› ä¸º myArray 是个数组,这里的 myArray.constructor 的值就是 function Array() { [native code] }。(如果 myArray 是个å—符串,myArray.constructor 的值就是function String() { [native code] }。还有 number,boolean,object,ç‰ç‰ã€‚)3ã€�toString() 是个方法,å�˜å—符串的方法,这里把 function Array() { [native code] } å�˜æˆ�å—符串,为了å�Žé�¢å¥½æ£€ç´¢ã€‚
4ã€�indexOf("Array") 是个方法,检索å—符串,这里看å—符串 function Array() { [native code] } 里有没有Array,有就返回首次出现的ä½�置,是一个数值,这里是 9。如果出现在第一个å—符,会返回 0ã€‚ç©ºæ ¼å�‚与计数。如果没有找到,就返回 -1。å�ªè¦� >-1,就说明有 Array,就能判æ–原æ�¥é‚£ä¸ªå‡½æ•°è°ƒç”¨ä¼ æ�¥çš„ fruits 是一个数组。如果 myArray.constructor.toString().indexOf("Object")>-1,那么 myArray 就是一个 Object 对象。ä¸�è¿‡é‚£æ ·åœ°è¯�,这个å�‚æ•°çš„å��å—就没å�–好了,应该å�«å�š myObject。
æ¸�æ¼
763***666@qq.com
�考地�
Kotori�Waifu
747***886@qq.com
�考地�
å—符串转日期:
var str = "2019-12-25"; // 转æ�¢æ—¥æœŸæ ¼å¼� str = str.replace(/-/g, '/'); // "2010/08/01"; // 创建日期对象 var date = new Date(str); å��ä¹‹ï¼Œæ—¥æœŸç±»åž‹è½¬åŒ–ä¸ºæ ¼å¼�化的å—符串: //å®Œæ•´çš„æ ¼å¼�化 var time2 = new Date().format("yyyy-MM-dd hh:mm:ss"); Date.prototype.format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //æ—¥ "h+": this.getHours(), //å°�æ—¶ "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //ç§’ "q+": Math.floor((this.getMonth() + 3) / 3), //å£åº¦ "S": this.getMilliseconds() //毫秒 }; //处ç�†å¹´ä»½ var reYear = /(y+)/; var resultYear = reYear.exec(fmt); if (resultYear) { var yearformatPart = resultYear[0];//匹é…�åˆ°çš„æ ¼å¼�化å—符 var yearVal = (this.getFullYear() + "").substr(4 - yearformatPart.length); fmt = fmt.replace(yearformatPart, yearVal); } for (var k in o) { var re = new RegExp("(" + k + ")"); var re = re.exec(fmt); if (re) { var Val = "" + o[k];//本次需è¦�替æ�¢çš„æ•°æ�® var formatPart = re[0];//匹é…�åˆ°çš„æ ¼å¼�化å—符 var replaceVal = (formatPart.length == 1) ? (Val) : (("00" + Val).substr(Val.length)); fmt = fmt.replace(formatPart, replaceVal); } } return fmt; }Kotoriã€�Waifu
747***886@qq.com
�考地�
è¡£å†
227***1235@qq.com
补充一下,通常æ�¥è®²ï¼Œä½¿ç”¨ instanceof 就是判æ–一个实例是å�¦å±žäºŽæŸ�ç§�类型,更é‡�è¦�的是 instanceof å�¯ä»¥åœ¨ç»§æ‰¿å…³ç³»ä¸ç”¨æ�¥åˆ¤æ–一个实例是å�¦å±žäºŽå®ƒçš„父类型。
用 instanceof æ�¥åˆ¤æ–类型å�ªèƒ½ç”¨äºŽå¯¹è±¡å±‚é�¢ï¼Œä¸�是一个对象则ä¸�行:
str = "asd"; if(str instanceof String)//返回false document.write("YES");//ä¸�会打å�°YES str = new String(); if(str instanceof String)//返回true document.write("yes");//ä¸�会打å�°yesè¡£å†
227***1235@qq.com
suika
137***0916@qq.com
NaN 这个特殊的数值也å�¯ä»¥ä½¿ç”¨ Object.is() 方法æ�¥åˆ¤æ–。
并且在这个方法ä¸è¿˜å�¯ä»¥åˆ¤æ– +0 å’Œ -0。
suika
137***0916@qq.com