JavaScript中的数据类型作为javascript的核心,我们经常要用到,也是最基础的。  javascript中有非常复杂的数据类型:包括对象(Object)数据类型,还有五个基本数据类型(Number, String, Boolean, Undefined, Null)。注意,这些基础的数据类型都是“不可改变的”(下文中将要解释),而对象是“可改变的”。

什么是对象(Object)?

一个对象是由一个或者多个基本数据类型或者引用数据类型组成的一个集合。组成集合的每一项由“属性/方法:值”的方式来设定这个对象的属性和方法,每一个属性/方法必须是独一无二的字符串或者数字。

举一个简单的例子:

var myFirstObject = {firstName: "Zhou", favoriteAuthor:"Nicholas"};

上面我们定义了一个对象-myFirstObject,他拥有firstName和favoriteAuthor两个属性,如果我们要访问的他话可以通过myFirstObject.firstName或者myFirstObject.favoriteAuthor或者myFirstObject[“firstName”]的形式来访问属性。但是,如果我们要访问的属性/方法名是一个数字,那么我们必须采用第二种方式(方括号方式)访问!否则会出错。

var ageGroup = {30: "Children", 100:"Very Old"};
console.log(ageGroup.30) // This will throw an error
// This is how you will access the value of the property 30, to get value "Children"
console.log(ageGroup["30"]); // Children
所以,一般情况下我们最好不要采用数字作为属性/方法名。

引用数据类型和基本数据类型的区别

一个主要的区别在于:引用数据类型的值存储的是一个引用而非真正的数值!我们先来看一个基本数据类型的例子:

// The primitive data type String is stored as a value
var person = "Kobe";  
var anotherPerson = person; // anotherPerson = the value of person
person = "Bryant"; // value of person changed
 
console.log(anotherPerson); // Kobe
console.log(person); // Bryant

由于基本数据类型的赋值操作是通过传值的方式来赋值的。所以,他们存储的数据都是相互独立,互不干扰的,一个变量数字改变跟另一个变量没有半毛钱关系。下面我们再来对照看一个引用数据类型的例子:

var person = {name: "Kobe"};
var anotherPerson = person;
person.name = "Bryant";
 
console.log(anotherPerson.name); // Bryant
console.log(person.name); // Bryant

我们可以看到,一个变量的属性值改变之后,另外一个引用了该对象的对象相应的属性值也跟着改变了。所谓引用,就是一个对象把自己存放东西的地方告诉了另外一个对象,另外一个对象下次要找什么东西的时候就跑到这个地方去找,如果其中一个对象对东西进行了变动,另外一个对象也可以看到(这就是我们在最前面提到“对象是可以改变的”原因)。总之,他们拥有同一个资源。

对象数据属性的特性

每一个对象数据属性不仅仅只是“属性/方法:值”对,它还包含其他三个特性:

    1.   
Configurable:表示这个属性是否可以被delete操作符删除。
    2.       Enumerable: 是否可以被for..in语句枚举出来。
    3.       Writable: 是否可以被改变。

注意:ECMAScript 5才支持对以上属性的访问。

创建对象

有两种普通创建对象的方法:

1.对象字面量方式

这是最普通,也是最简单的创建对象的方式:

// This is an empty object initialized using the object literal notation
var myBooks = {};
// This is an object with 4 items, again using object literal
var mango = {
color: "yellow",
shape: "round",
sweetness: 8,
howSweetAmI: function () {
        console.log("Hmm Hmm Good");
    }
}
2.构造器(函数)方式
一个构造器就是一个初始化新的对象的一个函数。我们通过“new”关键字来调用这个构造函数。
function Person(name, age){
this.name = name;
this.age = age;
this.sayName = function(){
    console.log(this.name);
  };
}
var person1 = new Person("zhouquan", 21);
person1.sayName();  //zhouquan

更多创建对象的方式请看我的一篇文章《javascript创建对象的方式》

参考资料:

http://javascriptissexy.com/javascript-objects-in-detail/

JavaScript对象详解的更多相关文章

  1. JavaScript | 对象详解

    ————————————————————————————————————————————————————————— 对象有哪些(导图) 内建对象 数据封装对象 Object对象 Object.prot ...

  2. (转)javascript中event对象详解

    原文:http://jiajiale.iteye.com/blog/195906 javascript中event对象详解          博客分类: javaScript JavaScriptCS ...

  3. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  4. JavaScript进阶知识点——函数和对象详解

    JavaScript进阶知识点--函数和对象详解 我们在上期内容中学习了JavaScript的基本知识点,今天让我们更加深入地了解JavaScript JavaScript函数 JavaScript函 ...

  5. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  6. JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】

    正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...

  7. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  8. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  9. JavaScript事件详解-zepto的事件实现

    zepto的event 可以结合上一篇JavaScript事件详解-原生事件基础(一)综合考虑源码暂且不表,github里还有中文网站都能下到最新版的zepto.整个event模块不长,274行,我们 ...

随机推荐

  1. UVA10325 The Lottery(容斥原理)

    题意: 给n,m,和m个数(k1~km).求1~n中有多少个数不是(k1~km)中任意一数的倍数. 题解: 容斥模板题.反面考虑,a的倍数有n/a个:既是a,也是b的倍数,即lcm(a,b)的倍数有n ...

  2. [LeetCode] Largest BST Subtree 最大的二分搜索子树

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...

  3. Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建

    Mongodb数据库主从复制的搭建 Writeby:lipeng                                    date:2014-10-22 最近项目上用到了位置查询,在网上 ...

  4. 安装Anaconda

    安装Anaconda来安装一切 spyder是python科学计算IDE,类似matlab.这是一个基于Qt的软件,如果使用pip install安装,会出现各种bug.pip install spy ...

  5. 使用TortoiseGit对android studio工程进行代码版本控制

    阅读下列文章时请保证你是否有以下工具: 1.Android Studio 2.TortoiseGit 和 msysGit 安卓工程版本控制哪些文件可以忽略 可以省略的文件如下: 目录 .gradle  ...

  6. 手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法

    手机浏览器浏览WebApp弹出的键盘遮盖住文本框的解决办法 最近碰到Android微信内置浏览H5页面,因为其中的文本输入框(input)放置在靠近页面的中下方,点击文本框以后,则输入框会被弹出的手机 ...

  7. 关于javascript的运动教程

    一.javascript的匀速运动 关于物体的javascript匀速运动要点分析: 1.物体关于运动的时候,我们要打开定时器 2.打开定时器的时候我们记得要在停止的时候关闭定时器,同时应该注意的是一 ...

  8. caffe添加自己的层

    首先修改src/caffe/proto/下的caffe.proto,修改好后需要编译 然后修改include/caffe/layers/logwxl_layer.hpp 然后修改src/caffe/l ...

  9. 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗

    碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...

  10. VirtualBox内ubuntu10.10系统和windows7 共享文件夹

    材料 virtualbox 4.3.0 ubuntu10.10 window 7 sp1 步骤 1.安装好虚拟机和操作系统,(具体步骤网上有很多) 2.安装虚拟机的增强功能包, 安装完成手动系统重新, ...