## 前言
也许你已经认为对对象的基本认识了,但还是跟小编一起过一遍js对象的基本知识吧。
## 对象
### 基本分类
* 内置对象:语法内定义的对象或者类,例如数组、函数、日期和正则表达式等
* 宿主对象:js解释器所嵌入的宿主环境
* 自定义对象:解释器运行中创建的对象
## 对象的创建
* 对象直接量 :赋值方式
var empty={};
var o={a:32,b:45}
* new 关键字创建 :var obj= new Person();
* 通过`Object.creat()`;
### 对象深拷贝
* 与浅拷贝的区别是,对象的属性是非基础类型数据也是可以的
~~~
if (typeof Object.assign != 'function') {
Object.assign = function(target) {
'use strict';
if (target == null) {
throw new TypeError('Cannot convert undefined or null to object');
}
target = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source != null) {
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
return target;
};
}
~~~
[深拷贝参考文档](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign )
### 对象属性
#### 属性分类
* 属性:自有属性和继承属性
* 自有属性:直接在对象中定义的属性
* 继承属性:对象的原型对象中定义的属性。
#### 属性操作
* 查询属性
1 可以通过. 或者[] 修改,中括号的时候名称需要加引号
2 赋值直接通过= 赋值即可。
* 删除属性
delete this.prop
* 检测属性
1.检测所有的属性 prop in obj (包括私有属性以及继承属性)
2.检测私有属性 hasOwnProperty("x")
* 遍历属性
~~~
//for in 短循环遍历属性
for(var p in obj){
console.log(p+":"+obj[p])
}
~~~
## 对象方法
## 对象复制,继承等
## es6拓展
* 对象的结构赋值
对象的赋值与数组的赋值区别最大就是,数组是按照次序赋值的,而对象是按照键值对赋值的,无序的。也就是说,变量名必须与属性同名才可以。
~~~
var x;//已经申明过的变量,避免解释x为代码块,不在首行
({x})={x:1};====({x}={x:1});//正确写法
//其他举例
var {foo,far}={foo:"aaa",far:"aaa"};//可以分别得到foo ,far的赋值
var {va}={foo:"aaa",far:"aaa"};//va undefined
var {foo:va}={foo:"aaa",far:"aaa"};//va =aaa 变量名与属性名不一样的时候
var p={
o:[
"hello",{y:"world"}]
}
var {o:[x,{y}]}=p; //对象也可以用来解析嵌套 结构
~~~
* is() 判断两个值是否相等,与===区别就是+0!=-0,nan=nan.
* assign 将对象的可枚举属性复制到目标对象,至少需要两个对象作为参数。第一个是目标对象,第二个是参数对象,当为多个对象时,也会分别复制过来。特别注意的是:当属性名相同的时候,属性值会被覆盖。
~~~
var target={a:3};
var source1={a:1};
var source2={b:3};
Object.assign(target,source1,source2);
~~~
* _proto_属性,用来读取或者设置对象的prototype对象。相关的有setPrototypeOf,getPrototypeOf()
* 增强的对象写法
增强之后允许直接写入变量和函数,书写更加简洁
var person={
birth,//birth:birth
hello(){}//hello=fn();
}
* 属性名表达式
允许对象的属性是变量or表达式,但要求其在中括号内
~~~
var lastword="last world";
var a={
firstword:"first world",
[lastword] : 'last dew d',
[lastword+'dv'] : 'last dew d'
}
~~~
* Symbol 新增的原始数据类型,不可以通过new创建。可以随机生成不重复变量,获取为.name,也可以通过指定name实现。
目前得不到name
~~~
let q1=Symbol();
let q2=Symbol();
let q3=Symbol();
~~~
* proxy 对象创建使用之前的拦截
~~~
var person ={
name:12
}
var proxy=new Proxy(person,{
get:function(target,property){
if(property in tearget){
return target[property];
}else{
throw new ReferenceError("not exist");
}
}
})
person.age// 抛出错误
pserson.name//12
~~~
* 对象的监听 observe unobserve ,暂不支持
~~~
function observer(change){
console.log(change.name+change.oldValue+change.object(change.name)+change.type);
}
var o={};
Object.observe(o,observer);//
~~~
- 前端入门
- 前端入职须知
- 前端自我定位
- pc与手机页面差别
- 前端书单
- 前端种子计划
- 前端技术栈
- ps
- ps入门阶段
- html
- html入门
- html代码规范
- meta
- table
- iframe
- a标签详解
- image
- html代码审查工具
- h5专题
- h5入门
- h5新增属性
- canvas画布教程
- audio/video
- Geolocation
- Websockets
- Web storage
- Communication
- Web Workers
- requestAnimationFrame
- css
- css入门必学
- css代码规范
- 项目字体规范
- css基本位置布局
- css常见样式命名规则
- css代码优化建议
- css常用样式名
- css选择器攻略
- css盒子模型的理解
- css属性继承与默认值
- css代码审查工具
- css中常见的知识盲区
- css3新特性浅谈
- css新特性了解
- border-radius
- background
- transform
- animation
- white-space
- css常用技术
- 文本两端对齐
- css之浮动解决方案
- css优化建议
- 文本超出省略
- img-sprites
- rem布局教程
- 水平居中&垂直居中
- 固宽&变宽布局
- 宽高固定比例的盒模型
- 样式预处理语言
- less教程
- sass教程
- postcss教程
- js
- javascript入门
- js代码规范
- js基础拓展
- js代码审查工具
- js性能优化
- js基本语句
- 基本运算
- 基本语句语法
- js对象
- es6入门
- obj
- Array
- Date
- String
- Boolean
- Number
- Json
- RegExp
- Math
- function
- jquery入门
- jq核心思想
- jq基本语法
- jq插件库汇总
- js常用技术
- break&continue区别
- js对日期转换
- js控制运动-move.js
- 原生js-cookie语法
- ajax请求后回调
- 表单数据序列化
- zepto
- zepto入门
- 百度touchjs
- js编程
- 插件库
- 功能性插件
- pdfjs
- wdatepicker
- qrcoder
- barcode插件
- photoviewer
- hammer.js
- echarts
- 交互组件
- layerjs
- java
- java入门
- java基本语句
- springMVC
- javaweb
- vm模板引擎
- freemarker
- maven教程
- mySql教程
- flex教程
- flex入门
- git教程
- git入门
- git分支
- git-tag管理
- git注意事项
- git-torise入门
- ide-git插件使用
- web
- web兼容
- web兼容思想
- pc端兼容适配文档
- pc端兼容bug汇总
- ie兼容bug汇总
- 手机兼容bug汇总
- web安全
- jeecms
- web存储
- app/h5组件
- 安卓教程
- ios教程
- 前端教程
- rubikx的教程
- 其他
- artTemplate
- tmod使用
- 跨域问题
- markdown教程
- 常用工具
- postman-api调试
- web常识
- 浏览器ua统计
- ui框架
- easyui
- bootstrap
- 入门推荐
- weui
- sui-pc
- sui-mobile
- layerUi