美文网首页
js中判断数据类型方法

js中判断数据类型方法

作者: goodluckall | 来源:发表于2018-01-15 18:02 被阅读0次

    [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

    相关文章

      网友评论

          本文标题:js中判断数据类型方法

          本文链接:https://www.haomeiwen.com/subject/ucpdoxtx.html