JavaScript类型转换

linguojie 发布于 2017/02/18 17:44
阅读 139
收藏 0

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<p>判断是否为数组。</p>
<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>

</body>
</html>

谁能跟我解释一下

return myArray.constructor.toString().indexOf("Array") > -1;

加载中
1
boystudio
boystudio

constructor:构造器

案例:

var a = new Array(1, 2, 3);
// 等效于

var a = [1, 2, 3];

// 那么 

a.constructor === Array // True

// 所以 

a.constructor.toString() === Array.toString() // True

Array.toString() === "function Array() { [native code] }"

这种判断数据组方式有点愚蠢的样子,可以直接用 `a.constructor === Array` 或者 `Array.isArray(a)` 或者用jQuery的 $.isArray(a)判断即可。

0
如比如比
如比如比

constructor属性始终指向对象的构造函数,是专门为function而设计的,它存在于每一个function的prototype属性中。这个constructor保存了指向function的一个引用。数组的时候,它的内容是function Array...,变成字符串时是存在Array这个关键字的,如果不存在那么不视为Array。这是不严谨的类名中如果含有Array会导致误判。改为这样

console.log(myArray.constructor === Array); // true

会好些。参照:

http://blog.csdn.net/hikvision_java_gyh/article/details/8937157

http://developer.51cto.com/art/200907/134913.htm

返回顶部
顶部