js中判断数据类型方法

2018-01-15  本文已影响0人  goodluckall

[if !supportLists]1. [endif]Hasownproperty

[if !supportLists](1) [endif]作用:判断属性是不是自己身上

[if !supportLists](2) [endif]语法:对象.hasOwnProperty(“要检测的属性”);

[if !supportLists](3) [endif]返回:true,false

[if !supportLists](4) [endif]注意:

[if !supportLists]① [endif]这个方法是object(顶层对象)身上的方法

[if !supportLists]② [endif]只找自身,不会顺着原型链网上找

function Person(name){

this.name=name

}

Person.prototype.country='china';

var p1=new Person('lisa');

console.log(p1.name);

console.log(p1.country);

console.log(p1.hasOwnProperty('name'));//true

console.log(p1.hasOwnProperty("country"));//false

console.log(p1);

//不是在构造函数时添加的,

[if !supportLists]2. [endif]判断数据类型的方法:

[if !supportLists](1) [endif]Typeof方法:只能判断基本数据类型,对于引入式数据类型不能判断返回的都是Object类型

[if !supportLists](2) [endif]Constructor属性(问题:undefined和null基本数据类型判断不了

[if !supportLists]① [endif]每个对象都有这个属性,默认指向改对象对应的构造函数,这个属性不在对象身上,在对象的原型身上

[if !supportLists]② [endif]作用:

[if !supportLists]1) [endif]查看对象的构造函数

[if !supportLists]2) [endif]类型检测

[if !supportLists]③ [endif]语法:

[if !supportLists]1) [endif]对象.constructor

[if !supportLists]④ [endif]返回值:对象的构造函数

var arr=[1,2];//new Array(1,2)

console.log(arr.constructor)    

function Person(name){

this.name=name

}

var p1=new Person('lisa');

console.log(p1.constructor);

console.log(p1.constructor==Person);

[if !supportLists]⑤ [endif]Constructor改变属性

[if !supportLists]1) [endif]修改对象指向的构造函数

function Person(name){

this.name=name

}

 var p1=new Person('lisa');

 console.log(p1);

 console.log(p1.constructor);

 p1.constructor=Array;

 console.log(p1);

 console.log(p1.constructor==Array);

[if !supportLists](3) [endif]Instanceof二元运算符

[if !supportLists]① [endif]作用:

[if !supportLists]1) [endif]用来查找对象与构造函数在原型链上有没有关系

[if !supportLists]2) [endif]判断类型,只适用于对象

[if !supportLists]② [endif]语法:对象instanceof构造函数

[if !supportLists]③ [endif]返回值:true和false

Eg:function Person(name){

this.name=name

}

function Coder(name){

this.name=name

}

var p1=new Person('lili');

console.log(p1 instanceof Person);//true

console.log(p1 instanceof Object);//true顶层

console.log(p1 instanceof Coder);

var sm='sat',arr=[],u=undefined,n=null,d=new Date(),n=1;

var m = "111";

console.log(arr instanceof Array);//true

console.log(d instanceof Date);

console.log(n instanceof Number);//false

console.log(m instanceof String);

[if !supportLists](4) [endif]toString(都适用)

[if !supportLists]① [endif]作用:

[if !supportLists]1) [endif]把对象类型转换成字符串

[if !supportLists]2) [endif]可以用来判断数据类型

Eg:var obj={};

console.log(obj);//tostring在对象对应的原型上

function Person(name){

this.name=name

}

var p1=new Person('lisa');

console.log(p1);

//系统对象下的这个方法在它对应的原型上

//我们自己定义的这个方法在object(顶层对象)的原型上

var arr=[1,2,3];

var obj={},f=function(){};

console.log(arr.toString());//1,2,3

console.log(obj.toString());//[object Object]

console.log(f.toString());

console.log(arr.toString()==p1.toString());

console.log(p1.toString==Object.prototype.toString);

// tostring做类型判断

var num=0,str='',b=true,n=null,u=undefined,d=new Date,r=new RegExp,obj={},f=function(){};

console.log(Object.prototype.toString.call(num));// Number

console.log(Object.prototype.toString.call(str));//String

console.log(Object.prototype.toString.call(b));

[if !supportLists]3. [endif]call作用:调用函数并且改变this的指向

语法:函数名.call(thisArg,arg1,arg2....)

thisArg this要指向的值

arg1,arg2.从第二参数开始,就是函数的参数

function fn(){

console.log(this)

}

fn();//Window

fn.call(1);//1

fn.call('lisa');//lisa

fn.call([1,2,3]);// [1, 2, 3]

fn.call({});//{}

fn.call(undefined);//Window

fn.call(null);//Window

function fn2(name,age){

console.log(name,age);

console.log(this)

}

fn2('lisa',18);

fn2.call('china','lisa');

[if !supportLists]4. [endif]Apply

[if !supportLists](1) [endif]调用函数并改变this的指向

(2)语法:函数名.apply(thisArg,[arg1,arg2....])

thisArg this要指向的值

第二参数是数组,就是函数的参数.

fn2.apply('Japan',['lisa',18])

fn2.apply('Japan',['lisa'])

[if !supportLists]5. [endif]//forin循环对象里的每一项,通过原型添加也遍历到

var obj={left:100,top:200};

for(var attr in obj){

console.log(attr,obj[attr]);

}

var arr=[1,2,3];

arr.name='lisa';

console.log(arr);

Array.prototype.age=18;

for(var attr in arr ){

console.log(attr,arr[attr])

}

//只遍历自已身上的属性

for(var attr in arr ){

 if(arr.hasOwnProperty(attr)){

console.log(attr,arr[attr])

}

}

�i

上一篇下一篇

猜你喜欢

热点阅读