js中哪些是对象

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

原型(prototype)

每一个JavaScript对象(null除外)都和另一个对象相关联。“另一个对象”指原型,每一个对象都从原型继承属性。

所有通过直接量创建的对象都具有同一个原型对象,并可以通过JavaScript代码Object.prototype获得原型对象的引用。通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。例如: 通过 new Array()创建的对象的原型就是Array.prototype.没有原型的对象为数不多,Object.prototype就是其中之一。它不继承任何属性。其他原型对象都是普通对象,普通对象都具由原型。

对象的创建

var obj1 = {a: '1', b: 1, c:(x) => {console.log(x)}}
var obj2 = new Object() var o1 = Object.create({x:1,y:2}) //o1继承了属性x和y
var o2 = Object.create(null); //o2不继承任何属性和方法,该方法用来创建一个没有原型的新对象
var o3 = Object.create(Object.prototype); //o3和{}和newObject()一样

对象的查询(get)和设置(set)

var book = {name:"book1"};
var name = book.name; //获得book的”name”属性
var name2 = book["name"]; //获得book的”name”属性
book.title = "title1"; //给book创建一个名为”title1的属性”
book["name"] = "book3"; //给“name”属性赋值

删除属性(delete)

delete运算符可以删除对象的属性,delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。delete运算符只能删除自有属性,不能删除继承属性。

delete book.name;    //book不再有属性name
delete book["name"] //book不再有属性”name”
o = {x:1}; //o有一个属性x,并且继承属性toString
delete o.x; //删除x,返回true
delete o.x; //什么都没做(x已经不存在了),返回true
delete o.toString; //什么也没做(toString是继承的),返回true
delete 1; //无意义,返回true

检测属性

可以通过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属性 var o = {x: 1};
o.hasOwnProperty("x"); //true: o有一个自由属性x
o.hasOwnProperty("y"); //false: o中不存在属性y
o.hasOwnProperty("toString"); //false: toString是继承属性

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

o.x !== undefined;  //true: o中有属性x
o.y !== undefined; //false: o中没有属性y
o.toString !== undefined; //true: o继承了toString属性

枚举属性

对象继承的内置方法是不可枚举的,但在代码中给属性添加的属性都是可枚举的。

var o = {x: 1, y: 2, z: 3};   //三个可枚举的自由属性
o.propertyIsEnumerable("toString") //false,不可枚举
//遍历属性
for(p in o){
console.log(p); //输出x、y和z,不会输出toString
}

4-JS对象的更多相关文章

  1. JS对象继承篇

    JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...

  2. JS 对象封装的常用方式

    JS是一门面向对象语言,其对象是用prototype属性来模拟的,下面,来看看如何封装JS对象. 常规封装 function Person (name,age,sex){ this.name = na ...

  3. JSON字符串和JS对象之间的转换

    JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象  JSON字符串 str JSON.parse(str) eval(str) eva ...

  4. js 对象的_proto_

    js 对象呢,有个属性叫_proto_,以前没听说过,也没关注,最近看这个原型,就被迫知道了这个东西,js 这里面的东西,真是规定的很奇怪,具体为啥也不知道,就测试发现的,对象的_proto_属性,和 ...

  5. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  6. js对象的深度克隆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. js对象详解

    js自定义对象 一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在J ...

  8. js对象常用2中构造方法

    //js 对象的构造方法通常有2中情况: //第一种是通过json对象构造 var persion={ name:"孙悟空", age:40, eat:function () { ...

  9. JS对象复制

    在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ...

  10. js对象私有变量公有变量问题

    0 js对象私有变量公有变量问题5 小弟初学JS面向对象编程 现有一问题 请教各位大虾: Person=function (){ //私有变量定义 var name; vae age; var Ale ...

随机推荐

  1. 6. 星际争霸之php设计模式--建造器模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  3. 解决Android SDK Manager更新下载速度慢

    1.在Host文件加上 203.208.46.146 www.google.com 74.125.113.121 developer.android.com 203.208.46.146 dl.goo ...

  4. 由 "select *" 引发的“惨案”

    今天凌晨做发布, 要合并多个分数据库的表数据到主数据库中, 有 30+ 分数据库. 前面都比较顺利, 在临近结束时,突然发现一个字段的值插入错误. 有一个表 T,字段分别为 (f1, f2, f3, ...

  5. Linux 的 Crontab 命令运用(转)

    cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序.例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron来自动执行. 服务的启动和停止 ...

  6. mysql引擎整理

    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引 擎:ISAM.MYISAM和HEAP.另外两种类型I ...

  7. arduino 蓝牙控制RGB LED灯

    /* 日期:2016.9.2 功能:arduino 蓝牙控制RGB LED灯 元件: 跳线公公头 * 8 rgbled, 220欧电阻 蓝牙模块 接线: 蓝牙模块VCC,GND分别接5V,GND;TX ...

  8. Install Hive

    一.Hive将元数据存储在RDBMS中,有三种模式可以连接到数据: 1.single User Mode:此模式连接到一个In-memory的数据库Derby,一般用于Unit Test. 2.Mul ...

  9. 编译器 perforSelecter时 警告去除

    #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks&quo ...

  10. 20145227 《Java程序设计》第1周学习总结

    20145227 <Java程序设计>第1周学习总结 教材学习内容总结 第一周学习Java首先了解了Java的历史,区分了JRE和JDK,并且学会了安装和配置环境.人机交互等基本知识,会编 ...