js对象

1 定义
(1)语法形式:

var obj = {
 key:value
};

(3)构造形式:

var obj = new Object();
obj.key = value;

2 js 的类型

(1)string
(2)number
(3)boolean
(4) null
(5) undefined
(6) object
简单基本类型:string ,number,boolean,null undefined .null有时会被当做一种对象。typeof null``// “object”.这是语言的一个bug。(原理:不同的对象在底层都表示成二进制,在js中如果前三位都是0,则为object类型,null的二进制本身就是全部为0的,故显示为object)
函数就是对象的一个子类型(即可调用的对象),数组也是对象中的一个子类型。
js中的一些对象子类型(内置对象):
(1)String
(2)Number
(3 Boolean
(4) Object
(5) Function
(6) Array
(7) Data
(8) RegExp
(9) Error

var obj = "I love you,rose";
typeof obj;//string
var obj1 = new String("I love you ,rose");
typeof obj1;//"object"
obj1 instanceof String //true

在必要时js引擎会自动把string字面量 转换为String,以便我们对其进行其他的操作。

var obj2  = " i a m";
obj2.length;  //5
obj2.charAt(4);//"m“

对于Number,Boolean,引擎也会把字面量转换成内置对象来进行操作,但是由于Object.Array,Function,RegExp他们都是对象,不是字面量。‘
存贮在对象中的属性只是一个指针,它指向该属性值。调用时有两中形式Object.key或者Object[''key''];其中.操作符需要让属性名满足标识符的规则,但是["..’']操作符可以使用任意Utf-8或者Unicode字符串作为属性名。

在对象中属性名一直都是字符串。使用typeof操作符后也是以字符串的形式输出的。如果进行多于一次的typeof操作,都会变为"strng".

typeof obj3//"object"
typeof typeof obj3//"string"

可计算属性名:

es6:
var prefix = "foo";
var myObject = {
 [prefix + "bar"]:"the girl is my friend",
[prefix +"baz"]:"the boy is my brother"
}
myObject.foobar;//"the girl is my friend"
myObject.foobaz;//"the boy is my brother"

可计算属性名最常用的场景可能是ES6的Symbol。

数组

向数组添加属性:

var arr1 = ["bat",1,"foo"];
arr1.bar = "bar";
arrq.length ;//3
arr1["3"] = "mioa";
arr1.length ;//4

从上面的代码我们发现给数组直接添加属性值时,如果是字符串的属性名,则他的length不会改变,如果是数字的属性名时,他会以为是数组的下标,从而添加长度length

复制对象(面试)

属性描述符

var myObject ={
a:2
};
Object.getOwnPropertyDescriptor(myObject,"a");
//{value: 2, writable: true, enumerable: true, configurable: true}

禁止对象拓展(添加不了新属性):

var myObject = {
 a:2
}
Object.perventExtensions(myObject);
myObject.b = 1 ;
myObject.b;//undefined

冻结对象(无法添加无法删除属性,除此之外还不能修改属性的值):

var myObject = {
 a:2
}
Object.freeze(myObject);
myObject.a = 5;
myObject.a //2

Getter&Setter

es5中可以使用getter 和setter部分改写默认操作

var myObject ={
get a(){
  return 2;  
  }
};
Object.defineProperty(
myObject,
"b",{
 get :function(){return this.a*2},
   enumerable:true
}
)
myObject.a//2
myObject.b//4

上面的代码在给我们展示给对象myObject 中的属性定义了一个getter函数,然后再设置了一个新属性为,再给其设置getter函数.
只使用一个(Getter或者是Setter)是理想的,他们应该成对存在:

var myObject3 = {
get a(){
 return this._a_;
  },
set a(val){
  return this._a_ = val*2;
  }
};
myObject3.a = 2;
myObject3.a  //4

引擎先读set再get

看对象是否存在该属性的方法:

(1)in操作符:

var obj = {
a:2
};
//false
("b" in obj);

(2) hasOwnproperty方法:

var obj = {
a:2
};

//true
obj.hasOwnProperty("a");

(3)很厉害的判定法:

Object.prototype.hasOwnProperty.call(obj,"a");

注意 in操作符是可以检查容器内是否有某个值,但是它实际上是在检查属性名是否存在。

var arr3 = [1,2,3];
(3 in arr3);//false

出现上面这段代码的原因如下:
对于数组来说:它的属性名(也就是索引)是0,1,2,里面是没有3的。
所以它会报false.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,934评论 6 13
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,108评论 0 21
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 2,587评论 9 22
  • 文章将会对对象属性特性,原型链,对象拷贝进行说明。 一、JavaScript属性的可迭代、可修改和可配置特性 作者...
    ArvinH阅读 357评论 0 0
  • 一念轻安---目录 文‖四小爷微风入窗,伫立与窗前,只一薄纱在身的南荣轻安不由的颤了颤。 此时一名摸约十七、八岁的...
    四小爷阅读 456评论 0 1