javascript 变量类型判断
一、typeof 操作符
对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时
var arr=new Array("","","","","");
typeof arr //object
二、instanceof
JavaScript中instanceof运算符会返回一个 Boolean 值,指出对象是否是特定类的一个实例。
var arrayStr=new Array("","","","","");
arrayStr instanceof Array//true
三、Object.prototype.toString( )
ECMA-262 :Object.prototype.toString( ) When the toString method is called, the following steps are taken:
1.Get the [[Class]] property of this object.
2.Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
3.Return Result (2)
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。也许你要问了,为什么不直接o.toString()?嗯,虽然Array继承自Object,也会有toString方法,但是这个方法有可能会被改写而达不到我们的要求,而Object.prototype则很少有人敢去碰它,所以能一定程度保证其“纯洁性”。
这里我们调用了 Object 对象原型的 toString 方法,如果对象是数组,则该函数返回’[object Array]‘。这种方法也可以用来获得任何其他变量的类型,不管变量的实际类型是什么,返回值都是以 object 开头,因为 Nunmber,String,Boolean,Array,Function 都继承自 JavaScript 内置的 Object 对象,而每一个变量,都是与其类型相应的对象的一个实例。
var num = ;
alert(Object.prototype.toString.call(num)); // [object Number]
var str = 'hudidit.com';
alert(Object.prototype.toString.call(str)); // [object String]
var boo = true;
alert(Object.prototype.toString.call(boo)); // [object Boolean]
var fun = function(){};
alert(Object.prototype.toString.call(fun)); // [object Function]
var obj = {};
alert(Object.prototype.toString.call(obj)); // [object Object]
var arr = [];
alert(Object.prototype.toString.call(arr)); // [object Array]
四、jQuery.isArray([]),源码如下:
isArray: Array.isArray || function( obj ) {
return jQuery.type(obj) === "array";
}
//jQuery.type源码
var class2type = {};
var toString = class2type.toString;
jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
type: function( obj ) {
if ( obj == null ) {
return obj + "";
}
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call(obj) ] || "object" :
typeof obj;
}
{
"[object Array]" : "array",
"[object Boolean]" : "boolean",
"[object Date]" : "date",
"[object Error]" : "error",
"[object Function]" : "function",
"[object Number]" : "number",
"[object Object]" : "object",
"[object RegExp]" : "regexp",
"[object String]" : "string"
}
toString方法的返回值正好是class2type对象的key值。所以class2type[ toString.call(obj) ]正好得到我们需要的返回类型字符串。
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
}
javascript 变量类型判断的更多相关文章
- javascript学习-类型判断
javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...
- javascript变量类型及作用域
javascript变量类型及作用域 一.简介 变量类型 ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型. 基本类型 基本类型指的是简单的数据段,5种基本数据类型:undef ...
- js课程 1-3 Javascript变量类型详解
js课程 1-3 Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...
- JS 中对变量类型判断的几种方式
文章整理搬运,出处不详,如有侵犯,请联系~ 数据类型判断和数据类型转换代码工具 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boo ...
- JavaScript变量类型检测总结
JavaScript中的变量类型: 基本类型值:Undefined,Null,Boolean,Number和String. 按值访问(可直接操作保存在变量中的变量值): 复制规则:当复制基本类型值时: ...
- C语言变量 类型判断
变量三要素: 一个变量有三个基本的要素,变量的名称,变量的类型,变量的值.所以int a = 10; 变量名为a,变量的存储类型为int型,变量的值为10. 变量还有一些属性如作用范围和存储类型. 变 ...
- JavaScript 变量类型 保存内存中的位置 和 引用
1. JavaScript变量 基本类型值在内存中占据固定大小的空间 因此被保存在栈内存中. 从一个变量向另一个变量复制基本来下的值 会创建这个值得一个副本. 引用类型的值是对象 保存在堆内存中. 包 ...
- Cocos Creator (JavaScript手机类型判断)
手机类型判断 var BrowserInfo = { userAgent: navigator.userAgent.toLowerCase() isAndroid: Boolean(navigator ...
- javascript数据变量类型判断(JS变量是否是数组,是否是函数的判断)
function isArray(o) { return Object.prototype.toString.apply(o) === “[object Array]”;}function isFun ...
随机推荐
- Python文件操作:同一个文件进行内容替换
在原文件上进行部分内容的替换,主要用到seek()函数和truncate()函数实现,直接上代码: ) # 将指针位置指到文件开头(注意:一定要有这步操作,不然无法清空文件)f1.truncate() ...
- Android OCR文字识别 实时扫描手机号(极速扫描单行文本方案)
身份证识别:https://github.com/wenchaosong/OCR_identify 遇到一个需求,要用手机扫描纸质面单,获取面单上的手机号,最后决定用tesseract这个开源OCR库 ...
- 2019 front end jobs collection
2019 front end jobs collection Alibaba https://ant.design/docs/spec/work-with-us-cn https://www.yuqu ...
- ASP.Net MVC+Ibaties架构
1.配置Ibaties首先在DLL引用中添加Ibaties相关引用:IBatisNet.Common.dll;IBatisNet.Common.Logging.Log4Net.dll;IBatisNe ...
- Delphi Dataset CurValue
TField.CurValue Property Represents the current value of the field component including changes made ...
- TScreen 类 - 通过 Screen 更换光标
//更换窗体或某个控件的光标可以不通过 Screen 对象, 譬如: begin Self.Cursor := crAppStart; Panel1.Cursor := crHandPoint ...
- Visual Stdio 2015打包安装项目的方法(使用Visual Studio Installer)
首先在官网下载VS2015的Visual Studio Installer 1.创建安装项目 里面最左侧的框框有三个文件夹 1.“应用程序文件夹”即"Application Folder&q ...
- HUAS 1483 mex(离线+线段树)
实在是太弱了.... 考虑离线,从mex[l,r]向mex[l,r+1]转移,显然是没啥东西可以记录的... 从mex[l,r]向mex[l+1,r]转移,记x=mex[l,r],如果[l+1,r]不 ...
- zoj 1298 Domino Effect (最短路径)
Domino Effect Time Limit: 2 Seconds Memory Limit: 65536 KB Did you know that you can use domino ...
- Ubuntu 10.04 下载android 4.1.1_r4
一.安装 curl git $ sudo apt-get install curl $ sudo apt-get install git-core 二.安装repo 1.在主目录(~)建立目录 bi ...