zoukankan      html  css  js  c++  java
  • js 对象(Object)

    一.对象

    除了字符串、数字、true、false、null和undefined之外,javascript中的值都是对象.

    javascript对象属性包括名字和值,属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性.

    属性名可以是javascript标示符也可以是字符串直接量,属性名字里用空格或者连字符"-",必须要用字符串表示.

    三类javascript对象和两类属性:

    • 内置对象(native object)是有ECMAScript规范定义的对象种类.例如,数组、函数、日期和正则表达式都是内置对象。
    • 宿主对象(host object)是由javascript解释器所嵌入的宿主环境(比如Web浏览器)定义的.客户端javascript中表示网页结构的HTMLElement对象均是宿主对象.既然宿主环境定义的方法可以当成普通的javascript函数对象,那么宿主对象也可以当成内置对象.
    • 自定义对象(user-defined object)是有运行中的javascript代码创建的对象
    • 自有属性(own property)是直接在对象中定义的属性.
    • 继承属性(inherited property)是在对象的原型对象中定义的属性.

    原型:Object.prototype获得对原型对象的引用;例如通过new Date创建的对象的原型就是Date.prototype.(例如对Date的扩展:Date.prototype.format = function(a){...})

    /**
     *@Title:扩展JS内部对象的功能方法!使用prototype原型方法
     *@Author:铁木箱子
     *@Date:2006-10-17
     */

    二.属性的查询和设置

    可以通过点(.)或方括号([])运算符来获取属性的值.对于点(.)来说,右侧必须是一个属性名称命名的简单标示符.对于方括号([])来说,方括号内必须是一个计算结果为字符串的表达式,这个字符串就是属性的名字:

    var author = book.author;

    var name = author.surname;

    var title = book["main title"];

    和查询属性的写法一样,通过点和方括号也可以创建属性或给属性复制,但需要将他们放在表达式的左侧:

    book.edition = 6;

    book["main title"] = "ECMAScript";

    三.作为关联数组的对象

    javascript对象都是关联数组,也称作散列、映射或者字典

    有很多场景智能使用数组写法来完成,比如说在写程序的时候不知道属性名称,属性名称是动态的,因此无法通过点运算符来访问对象属性。但可以使用[]运算符,因为它使用字符串值(字符串值是动态的可以在运行的时候更改)而不是标示符(标示符是静态的,必须写死在程序里)作为索引堆属性进行访问.object[变量]是对的,但是object.变量是错误的.

    四.检测属性

    javascript对象可以看做属性的集合,我们经常会检测集合中成员的所属关系——判断摸个属性是否在某个对象中。可以通过in运算符、hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点.

    var o = {x:1}

    "x" in o;   //true: "x"是o的属性

    "y" in o;   //false: "y"不是o的属性

    "toString" in o;   //true: o继承toString属性

    对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自由属性.对于继承属性它将返回false:

    var o = {x:1}

    o.hasOwnProperty("x");   //true: "x"是o的属性

    o.hasOwnProperty("y");   //false: "y"不是o的属性

    o.hasOwnProperty("toString");   //toString是继承的属性

    propertyIsEmumerable()是hasOwnProperty()的增强版,是有检测到是自有属性且这个属性的可枚举性为true时它才返回true.

    除了使用in运算符之外,另一种更简单的方法是使用"!=="判断一个属性是否是undefined:

    var o = {x:1}

    o.x !== undefined;  //true: "x"是o的属性

    o.y !== undefined;  //false: "y"不是o的属性

    o.toString !== undefined;   //true: o继承了toString属性

    然而有一种场景只能使用in运算符而不能使用上述属性访问的方式.in可以区分不存在的属性和存在的但是值为undefined的属性.

    五.枚举属性

    var o = {x:1,y:2,z:3}

    o.propertyIsEnumerable("toString");

    for(p in o){

      cosole.log(o[p])

    }

  • 相关阅读:
    scan chain的原理和实现——3.Tester Timing
    pattern——serial/paralel
    Scan and ATPG (Tessent)----1.基础概念
    ipdb介绍及Tensor
    pytorch简介
    Python 之map、filter、reduce
    分类器、logistic回归
    机器学习方法、距离度量、K_Means
    动态规划、图
    T分布
  • 原文地址:https://www.cnblogs.com/sugar-tomato/p/3654461.html
Copyright © 2011-2022 走看看