[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
网友评论