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
}

最新文章

  1. MyBatis学习笔记(一)入门
  2. c#中 HttpWebRequest请求抛异常,基础连接已经关闭: 连接被意外关闭
  3. [Xamarin] 啟動拍照並且儲存 (转帖)
  4. 【未完成0.0】Noip2012提高组day2 解题报告
  5. R(三): R包原理及安装
  6. 五大Android布局方式浅析
  7. VMware虚拟机安装Linux英文改中文系统并更新yum安装输入法
  8. Android应用--新浪微博客户端新特性滚动视图和启动界面实现
  9. Android设置虚线、圆角、渐变
  10. ActionBar开启Overlay Mode(覆盖模式)
  11. 模板方法模式 Template method 行为型 设计模式(二十六)
  12. mysql You can't specify target table 'xxx' for update in FROM clause的解决
  13. JAVA String中文乱码
  14. firewall防火墙使用
  15. windos上安装jenkins部署springboot的jar包(未运行,只是在打包并上传linux成功了)
  16. 多设备同时进行monkey抗压测试
  17. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十三):系统备份还原
  18. ansible的安装部署及简单应用
  19. 如何更新clob类型的内容
  20. ResouceUtils.getFile()取不到Jar中资源文件源码小结

热门文章

  1. demo03linearlayoutdemo;
  2. Android自定义ScrollView实现一键置顶功能
  3. shell 命令
  4. 《zw版·Halcon-delphi系列原创教程》 水果自动分类脚本(机器学习、人工智能)
  5. HTML5,超级链接
  6. IIS、Asp.net 编译时的临时文件路径(转载)
  7. android SDK安装容易出错的原因
  8. android 项目学习随笔七(ViewPagerIndicator与ViewPager)
  9. Linux下串口编程【转】
  10. java对象的序列化与反序列化使用