JS笔记(二)

    技术2022-07-11  101

    1. js对象类型检测

    1.typeof(只能区分基本类型和对象类型)

     

    console.log(typeof(null)); //Object console.log(typeof(false)); //boolean console.log(typeof('str')); //String console.log(typeof(11)); //number console.log(typeof(undefined)); //undefined console.log(typeof({})); //object console.log(typeof([])); //Object

     

    2.instanceof

    //注意:判断时左边必须是一个对象,右边是对象类名或者构造函数 //常用方式 function Foo(){} var f = new Foo() console.log(f instanceof Foo) //true //存在原形继承时 function Fa(){} function Ch(){} Ch.prototype = new Fa() var f = new Ch() console.log(f instanceof Ch) //true console.log(f instanceof Fa) //true //实现原理: function instance_of(L, R) { //L 表示左表达式,R 表示右表达式 var O = R.prototype; // 取 R 的显示原型 L = L.__proto__; // 取 L 的隐式原型 while (true) { if (L === null) return false; if (O === L) // 当 O 显式原型 严格等于 L隐式原型 时,返回true L = L.__proto__; } } //由上述实现的源码可知: function Foo(){} console.log(Object instanceof Object) //true console.log(Foo instanceof Foo) //false

     3.constructor

     

    //typeof检测出是对象类型后可以使用constructor的方法进行类型检测, //可以避免instanceof中使用Object做类型检测也依然是true的问题 function Foo(){} var f = new Foo() console.log((f).constructor === Foo) //true console.log((f).constructor === Object) //false //注意:constructor存在可以被改变问题 function Foo(){} Foo.prototype = new Array() var f = new Foo() console.log((f).constructor === Foo) //false console.log((f).constructor === Array) //true

    4.Object.prototype.toString.call()

     

    var a = [] console.log(Object.prototype.toString.call(a)) //[object Array] var b = {} console.log(Object.prototype.toString.call(b)) //[object Object]

     

    2.JS对象属性

    1.增加属性:

     

    var obj = {} obj.name = 'jj' obj['age'] = 18 var address = 'addr' obj[address] = '杭州' console.log(obj.addr) //杭州

    2.删除属性

    var obj = {} obj.name = 'jj' obj.age = 18 delete obj.age delete obj['age'] var s = 'age' delete obj[s] //delete 关键词不会删除被继承的属性 //如果删除了某个原型属性,则将影响到所有从原型继承的对象

     3.检测属性 

     

    var obj = { name: 'jj', age: 18 } console.log('name' in obj) //true console.log(obj.hasOwnProperty('age')) //true

    4.属性遍历

    var obj = { name: 'jj', age: 18, addr: '杭州' } for(var key in obj){ console.log(key) console.log(obj[key]) console.log('------') }

     

     

    Processed: 0.010, SQL: 9