第一部分 

  我们知道JavaScript中的数据类型有基本数据类型和引用类型,其中Object类型就是非常常用的类型。那么如果创建一个Object类型的实例呢?下面我介绍两种方法:

   第一:构造函数法。

    

1
2
3
var person=new Object();
person.name="zhuzhenwei";
person.age=20;

  这里Object()实际上是默认的构造函数,显然,为满足需要,我们可以通过后两条语句添加新的属性。JavaScript高级程序设计第3版83页介绍说,该构造函数为新对象定义了默认的属性和方法。但,这是真的吗?我们可以验证一下。因为for-in语句可以遍历对象中所有的属性,因此我们可用它来验证:

1
2
3
4
var person=new Object();
for(var propName in person){
   console.log(propName);
}

  如果Object构造函数有默认属性,那么我们在控制台上应该是可以看到的,但实际上:

什么都没有?!

也就是说Object本身是不具有任何默认的属性的。

因为如果我们添上后面两句:

1
2
3
var person=new Object();
person.name="zhuzhenwei";
person.age=20;<br>for(var propName in person){<br>  console.log(propName);<br>}

 我们就可以得到如下:

即此时person就有了两个属性,也就是说,Object函数自身确实没有默认的属性

但是,真的是这样吗?javascript高级程序设计会出现这样的错误吗?答案是不会~


因为在这里使用for-in语句是不合适的,不能通过它枚举初object的所有属性。它只适用于window之类的对象,这里我们最好使用in操作符。因为object通过测试是不可枚举的。 alert(object.propertyisenumerable("prototype"));//false

1
2
3
4
var person=new Object();
console.log("toString" in person);//true
console.log("valueOf" in person);//true
console.log("constructor" in person);//true

  也就是说Object至少是有上述属性和方法的。

  第二:对象字面量表示法

 

1
2
3
4
var person={
    name:"zhuzhenwei",
    age:18
};

    这里也创建了一个对象实例,同样通过for-in语句,我们可以验证其也只有name和age两个属性,且在通过对象字面量表示法定义对象时,实际上不会调用Object构造函数。

    关于对象字面量有以下一点需要注意的地方:

  • 在末尾需加分号;表示结束。
  • 在一个属性定义之后用逗号分隔,最后一个属性不需要
  • 属性名可以加双引号,好处是我们可以包含错误的字符。并使用方括号表示法来访问对象的属性。

      

比如:

1
2
3
var person=new Object();
person.age age=18;
console.log(person.age age);

这时,由于属性名中包含了空格,因此得到的结果一定是 语法错误。

然而:

1
2
3
4
var person={
      "age age":18
};
 console.log(person["age age"]);

这时候我们就可以得到正确的答案了。

最后,实际上对象字面量还可以作为参数传递,大家有兴趣可以去了解,这里就不介绍了~

第二部分:

什么使数组字面量呢?对象字面量用于创建对象,数组字面量即用于创建数组。创建数组有两种方法。

  第一:构造函数法.

  

1
var arr=new Array();

  第二:数组字面量法

1
var arr=["zhu","zhen","wei"];

  因为所有的引用类型都是继承自Object,因此Array也是继承自object的,并在继承的基础上添加了自己的属性和方法。

1
2
3
4
var arr=new Array();
console.log("toString" in arr);//true
console.log("valueOf" in arr);//true
console.log("length" in arr);//true

最新文章

  1. Activiti学习(一) 环境搭建
  2. 微信小程序里碰到的坑和小知识
  3. SnapKit代码约束
  4. hiho_1066_并查集
  5. Codeforces 486C Palindrome Transformation(贪心)
  6. 从零开始用 Flask 搭建一个网站(二)
  7. Linux面试题(1)
  8. 影响CSS的margin合并的几个属性
  9. uWSGI的配置与发布
  10. How std::cout works [duplicate]
  11. saltstack grains
  12. SparkContext.union 与 RDD.union
  13. centos 7 redis-4.0.11 主从
  14. C#学习笔记(22)——C#创建文本文件txt并追加写入数据
  15. ReactNative——UI1.登录界面样式设置
  16. 61 origin授控于MATLAB
  17. Oracle中用户解锁
  18. centos7 ntp服务器配置
  19. 安装及运行 RabbitMQ 服务器 (linux) 失败! 安装erlang 失败,无法继续
  20. JavaScript学习笔记 isPrototypeOf和hasOwnProperty使用区别

热门文章

  1. 关于verilog中语句可不可综合
  2. Netty与传统Server对比
  3. 如何在Raspberry Pi 3B中安装Windows 10 IoT Core
  4. 数组a和&amp;a区别
  5. django中request相关用法
  6. Java设计模式之策略设计模式
  7. Caffe-5.2-(GPU完整流程)训练(依据googlenet微调)
  8. js通用方法检測浏览器是否已安装指定插件(IE与非IE通用)
  9. Angular专题系列之一:初识Anjularjs
  10. 自学Zabbix3.5.6-监控项item-Value mapping值映射