zoukankan      html  css  js  c++  java
  • JavaScript: in, hasOwnProperty, delete, for/in

    in 运算符

    判断对象是否拥有某一属性
    只要对象拥有该属性,就会返回true,否则false

    var point = { x:1, y:1 };
    alert( 'x' in point );  //true
    
    var arr = ['one', 'two'];
    alert( 'kang' in arr );  //false
    alert( '1' in arr );  //true
    alert( 'push' in arr );  //true
    
    var fn = function(){};
    fn.prototype.site = 'cnblogs.com';
    var obj = new fn();
    alert( 'site' in obj );  //true
    

    hasOwnProperty

    判断对象是否具有某一属性。这个属性必须是自己具有的,即非继承的。

    var o = {};
    o.name = 'object';
    alert( o.hasOwnProperty('kang') );    //false: 不存在
    alert( o.hasOwnProperty('toString') );    //false: 'toString'方法继承自'Object'
    alert( o.hasOwnProperty('name') );	//true
    
    alert( Math.hasOwnProperty("kang") );	//false
    alert( Math.hasOwnProperty("cos") );	//true;
    alert( Math.hasOwnProperty("toString") );  //false: 'toString'方法继承自'Object'
    
    var base = function(){
        this.name = 'Rain Man';
    };
    base.prototype.site = 'cnblogs.com';
    var o = new base();
    alert( o.hasOwnProperty('site') );	//false: 是继承的
    alert( o.hasOwnProperty('name') );	//true
    

    delete 运算符

    删除对象的属性,删除后不能使用 for/in 枚举出删除的属性,使用hasOwnProperty()检测该属性返回false。
    删除数组的元素,删除后数组的 length 不会改变,不可以使用 for/in 枚举出来删除的元素; shift()、pop()、splice()才会真正的删除数组中的元素

    var point = { x:1, y:1 };
    delete point.x;  //{ y:1 }
    
    var arr = ['one', 'two'];
    delete arr[0];  //[undefined, 'two'] 
    

    for/in

    枚举对象的属性
    对象的一些属性是不可以使用for/in来输出的,例如:内部的,用户自定义的可以,从构造函数prototype中继承的也可以枚举出

    var arr = ['one', 'two'];
    arr.author = 'rainman';
    //不会枚举出数组的push,pop等方法,因为这些方法都是内部的
    for( var i in arr ) ist(arr[i]);    //'one'、'two'、'rainman'
    
    var Blog = function(){};
    Blog.prototype.site = 'cnblogs.com';
    var oBlog = new Blog();
    for( var i in oBlog ) ist(oBlog[i]);	//'cnblogs.com'
    
    var RM = function(){};
    RM.prototype = new Blog();
    RM.prototype.url = 'http://rainman.cnblogs.com'
    var oRM = new RM();
    
    for( var i in oRM ){
        ist(i + ':'+ oRM[i]);	//'url:http://rainman.cnblogs.com'、site:cnblogs.com
    }
    
  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/rainman/p/1798022.html
Copyright © 2011-2022 走看看