instanceof, typeof, & Object.prototype.toString

/**
*
* @authors Your Name ([email protected])
* @date 2016-11-18 09:31:23
* @version $Id$
*/
instanceof:

  1、左操作数是一个对象,右操作数是标识对象的类,如果左侧的对象是右侧类的实例,则表达式返回true,否则返回false

  2、如果左边的操作数不是对象,返回false

  3、如果右边的操作数不是函数,抛出类型错误异常

  4、在计算obj instanceof f 时, 会先计算f.prototype, 然后在原型链中查找obj,如果找到则obj是f或者是f父类的实例,则返回true
//注意原始值与对象的区别

//instanceof
var data = [1, 2, 3, 4, 5];
data instanceof Array; //true
data instanceof Object; //true

data instanceof Number; //false
1 instanceof Number; //false
1 instanceof Object; //false
var num = 1;
num instanceof Number; //false
num instanceof Object; //false
var num = Number(1);
num instanceof Number; //false
num instanceof Object; //false

Number(1) instanceof Number; //false
Number(1) instanceof Object; //false
var num1 = new Number(1);
num1 instanceof Number; //true
num1 instanceof object; //true
null instanceof Object; //false;
undefined instanceof Object; //false;

var data = [1, 2, 3, 4, 5];
var bb = {};
var cc = function(){};
data instanceof bb; //TypeError: Expecting a function in instanceof check, but got #<Object>
data instanceof cc; //false

typeof
typeof a : typeof 后的操作数可以是任意类型,返回值为操作数类型的字符串
//typeof

typeof undefined; // "undefined"
typeof null; // "object"

typeof ture; // "boolean"
typeof false; // "boolean"

typeof NaN; // "number"
typeof Infinity // "number"
typeof 1 //"number"
typeof "abc"; //"string"

typeof function(){}; // "function"
typeof RegExp; //"function"
typeof Math; //"object"

Object.prototype.toString
默认的toString方法:Object.prototype.toString()返回[object class], 我们可以通过它获取对象的类型信息

var data = [1, 2, 3, 4, 5];
Object.prototype.toString.call(data); //"[object Array]"

我们可以定义如下的函数返回对象的类型信息

function classof(obj){
if(obj === null){
return "Null";
}
if(obj === undefined){
return "Undefined";
}
return Object.prototype.toString.call(obj).slice(8, -1);
}

测试:

classof(null); // "Null"
classof(undefined) // "Undefined"
classof("abc"); // "String"
classof([]); // "Array"
classof({}); //"Object"
classof(//); // SyntaxError: Unexpected token }
classof(/,/); //"RegExp"
classof(new Date()); //"Date"

classof(window); // "global"
classof(function(){}); // "Function"
function f(){}; classof(new f()); //"Object"

需要注意的:
1、javascript中除了原始值(数字、字符串、布尔值、null、undefined)之外的都是对象

2、javascript不区分整数值和浮点数值

3、任何Javascript值都可以转换为布尔值,下面的都会被转换为false

undefined

null

0 / -0

NaN

""

因而如需检测对象是不是null应该采用如下方式而不是直接if(obj):

if(obj !== null)

4、null是关键字可以理解为一个特殊的对象值,但是对 typeof null 返回"object"

5、undefined用于表示未定义,不是关键字,typeof undefined 返回 "undefined"

  查询时如果不存在返回undefined,函数没有返回值返回undefined;

  undefined是预定义的全局变量;在ECMAScript3中是可读写变量,ECMAScript5中是只读变量

null == undefined; //true

null === undefined; //false;

另外null和undefined不包含任何属性和方法,因而使用用null和undefined做. 或者 [] 操作会报类型错误

6、null和undefined在任何期望是一个对象的地方都会造成类型错误异常,区别于字符串、数字、布尔值,详细见下一条

7、字符串,数字和布尔值虽然不是对象,但是在读取它们的属性或者方法时,表现的和对象一样,使用它们的方法和属性时会通过其对应的构造函数创建一个临时对象,例如:

var string = "wish you happy";
var words = string.split(" ");

我们在引用string的属性时javascript会调用new String(string);
但是,如果我们给他们的属性赋值则会忽略相关操作,例如:

var string = "wish you happy";
string.length = 17;
string.len = 14;
console.log(string.length); //14
console.log(string.len); //undefined

8、需要注意的类型转换:

//转化为字符串

undefined: "undefined"

null: "null"

true: "true"

false: "false"

0: "0"

-0: "0"

NaN: "NaN"

Infinity: "Infinity"

-Infinity: "-Infinity"

[]: ""

[1, 2, 3]: "1,2,3"

//转化为数字

undefined: NaN

null: 0

"": 0

"1.2": 1.2

"wish": NaN

时间: 2024-10-28 09:56:07

instanceof, typeof, & Object.prototype.toString的相关文章

检测变量类型之typeof,instanceof,Object.prototype.toString

在JS中有时候是需要对一个变量进行检测的,检测到这个变量是什么类型之后,我们就可以做相应的处理. 方法一typeof typeof方法主要用于基本类型的检测,在检测Boolean,number,undefined,string的时候非常好用.比如: 1 var test1= 1; 2 alert(typeof test1);//输出number 3 var test2 = ""; 4 alert(typeof test2);//输出string 5 var test3 = undefi

判断对象类型 typeof instanceof Object.prototype.tostring()

常见的有三种方法  1, typeof  2, instance of   3, object.prototype.toString.apply(); 1,typeof  typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于

typeof 、Object.prototype.toString和 instanceof

数据类型 js 基本类型包括:Undefined  symbol null string boolean number js 引用类型包括:object array Date RegExp typeof 我们一般用typeof来判断数据的类型的 接下来我们试试 console.log(typeof undefined) //undefined console.log(typeof null) //object console.log(typeof Undefined) //undefined c

类型判断----小白讲解typeof,instanceof,Object.prototype.toString.call()

1.typeof只能判断基本类型数据, 例子: typeof 1 // "number" typeof '1' // "string" typeof true // "boolean" typeof {} // "object" typeof [] // "object" typeof function(){} // "function" typeof undefined // &quo

typeof()与Object.prototype.toString.call()

用typeof方法只能初步判断number string undefined boolean object function symbol这几种初步类型 使用Object.prototype.toString.call(var) 能判断具体的类型数组,函数 1 var arr = [1,2,3]; 2 typeof(arr); 3 object.prototype.toString.call(arr) 原文地址:https://www.cnblogs.com/angle-yan/p/116156

JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508) 基本数据类型:String,boolean,Number,Undefined, Null 引用数据类型: Object(Array,Date,RegExp,Function) 疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null.undefin

JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转化为string类型: console.log(true.toString());//"true" console.log(false.toString());//"false&quo

用Object.prototype.toString.call() 区分对象类型

在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组.函数.对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串. 要想区别对象.数组.函数单纯使用 typeof 是不行的.或者你会想到 instanceof 方法,例如下面这样: var a = {}; var b = []; var c = function () {

Array.isArray and Object.prototype.toString.call

Array.isArray() 用于确定传递的值是否是一个 Array. Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false Array.isArray("foobar"); // false Array.isArray(undefined); // false Array.isArray(null); // false Array.isArray(new Array()); // true Arr