1、对象

  概念:对象可以通过花括号{...} 和其中包含一些可选的属性来创建。 属性时一个键值对,键是一个字符串,值可以是任何类型。

对象的创建

 let  user = new Object();   //构造函数  的语法
let user = {}; //"字面量" 的语法

  对象的属性:

 let user = {  //一个对象
name : "John", //键“name" ,值"John"
age:30 //"键”age“ ,值 30
}; 属性有键 ,在冒号的前面”:“,值在冒号的右边

对象属性的添加和删除

 user.sex = "man";  //对象属性的添加
delete user.sex; //对象的的删除

  对象中方括号的使用

 //处理多词属性
let user = {}; user["like birds"] = true;//设置 alert(user["like birds"]); //true 使用 delete user["like birds"]; // 删除

  计算属性

 //例子一:
let fruit ="apple";
let bag = {
[fruit]:5
};
alert(bag.apple); //例子二:
let fruit = "apple";
let bag = {};
bag[fruit] = 5;
//例子三
let fruit = "apple";
let bag = {
[fruit + "test"]:5;
};
alert(bag.fruittest);

  属性值简写

  当属性值的和键相同时可以如下所写

let user = {
name, //此处 name 和 name:name 相同
age:13
}

  对像属性存在值的检查

  判断的方式  通过获取属性如果为undefined 则不存在,另一种方式为使用 in 关键字,但也存在特殊情况。具体示例如下:

 let user = {);

 alert( user.isExist==undifined) //true  表示这个属性不存在

 alert("isExist" in user); //false   属性不存在

 //特殊情况

 let obj = {
test:undefined
} alert(obj.test==undefined) //false ,但是这个属性存在,所以这时候使用这种方式就不合适
alert("test" in obj); //true 表示这个属性存在。

  for  ... in 循环

 let user = {
name: "John",
age: 30,
isAdmin: true
}; for(let key in user) {
// keys
alert( key ); // name, age, isAdmin
// 属性键的值
alert( user[key] ); // John, 30, true
}

  引用复制

 let user = { name: 'John' };

 let admin = user;

 admin.name = 'Pete'; //  改变 "admin" 的引用

 alert(user.name); // 'Pete', changes are seen from the "user" reference
上面的例子展示了只存在一个对象,就像我们的抽屉有两把钥匙,如果一个钥匙(admin)去使用了
抽屉,稍后使用另外一个钥匙(user)打开的时候,就会看到有变化。

  比较引用

  

 //两个引用指向同一个对象的时候他们相等。
let a = {};
let b = a; // 复制引用 alert( a == b ); // true,两个变量指向同一个对象
alert( a === b ); // true //如果是两个不同的属性,他们就不相等,即使都是空的。
let a = {};
let b = {}; // 两个独立的对象 alert( a == b ); // false

  常量对象

 //一个被 const 修饰的对象可以被修改。
const user = {
name: "John"
}; user.age = 25; // (*) alert(user.age); // 25
//但是不能修改user这个对象
const user = {
name: "John"
}; // 错误(不能再给 User 赋值)
user = {
name: "Pete"
};

  对象复制和合并  Object.assign

  复制一个对象的变量也等同于创建了此对象的另一个引用。

  

 //用原始的代码操作
let user = {
name: "John",
age: 30
}; let clone = {}; // 新的空对象 // 复制所有的属性值
for (let key in user) {
clone[key] = user[key];
} // 现在复制是独立的复制了
clone.name = "Pete"; // 改变它的值 alert( user.name ); // 原对象属性值不变

  用Object.assign 来实现

  语法:Object.assign(dest[, src1, src2, src3...])

  • 参数 destsrc1, ..., srcN(可以有很多个)是对象。
  • 这个方法复制了 src1, ..., srcN 的所有对象到 dest。换句话说,从第二个参数开始,所有对象的属性都复制给了第一个参数对象,然后返回 dest
     let user = {
    name: "John",
    age: 30
    }; let clone = Object.assign({}, user);

    特殊情况,对象中仍有对象

     let user = {
    name: "John",
    sizes: {
    height: 182,
    width: 50
    }
    }; let clone = Object.assign({}, user); alert( user.sizes === clone.sizes ); // true,同一个对象 // user 和 clone 共享 sizes 对象
    user.sizes.width++; // 在这里改变一个属性的值
    alert(clone.sizes.width); // 51

    在这种情况下,对象内部的对象并没有完全复制,而只是复制了对象的的值,在这种情况下,要再次判断,或者选择完善的j库

javaScript 基础知识汇总(四)的更多相关文章

  1. javaScript 基础知识汇总 (十四)

    1.回调 什么是回调? 个人理解,让函数有序的执行. 示例: function loadScript(src,callback){ let script = document.createElemen ...

  2. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  3. javaScript 基础知识汇总(三)

    1.循环:while 和 for while 循环 while(condition){ //代码 循环体 } do ... while  循环 let i =0; do { //循环体 }while( ...

  4. javaScript 基础知识汇总(六)

    1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number  boolean  symbol  null  undefined 对 ...

  5. javaScript 基础知识汇总(五)

    1.垃圾回收 JavaScript 的内存管理是自动的,不能强制执行或者阻止执行 可达性 JavaScript中主要的内存管理概念是可达性. 什么是可达性? 定义一个对象 let user = { n ...

  6. javaScript 基础知识汇总(二)

    1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...

  7. javascript 基础知识汇总(一)

    1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...

  8. JavaScript 基础知识汇总目录

    一.标签.代码结构.现代模式.变量.数据类型.类型转换 GO 二.运算符.值的比较.交互.条件运算符.逻辑运算符 GO 三.循环 while 和 for .switch语句.函数.函数表达式和箭头函数 ...

  9. javaScript 基础知识汇总 (十三)

    1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...

随机推荐

  1. 第三章 JavaScript操作Dom对象

    常用的方法: 1.访问节点: 通过Document.getElementByXXX()获得一个指定节点-->再通过以下属性节点访问节点:第一部分:节点属性a:parentNode 返回节点的父节 ...

  2. Netty+WebSocket 获取火币交易所数据项目

    Netty+WebSocket 获取火币交易所时时数据项目 先附上项目项目GitHub地址 spring-boot-netty-websocket-huobi 项目简介 本项目使用 SpringBoo ...

  3. 二、Markdown基本语法

    目录 2.1 标题 一级标题 二级标题 三级标题 2.2 加粗 2.3倾斜 2.4 高亮 2.5 上标 2.6 下标 2.7 代码引用(>式) 2.8 代码引用(```式) 2.9 代码引入(` ...

  4. dubbo负载均衡是如何实现的?

    dubbo的负载均衡全部由AbstractLoadBalance的子类来实现 RandomLoadBalance 随机 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀 ...

  5. xml的四种解析方式(转载)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  6. Java小白进阶之值传递-引用传递

    class ClassA{ int value;//成员变量 } public class TestClassA{ public static void main(String args[]){ in ...

  7. Java中...的作用

    Java中...的作用,代表接收若干个相同类型的参数 public void testFunction(int...arr){    //接收若干个int类型的参数     for (int i:ar ...

  8. java后端开发面经 数据库相关

    小姐姐:怎么理解感情中的付出和回报? 你答:有这样一个故事,讲的是一个小男孩和一个小女孩,这个小男孩呢,用很多好玩石头,而这个小女孩呢,有好多好吃的糖果,有一天,他们相互约定:小男孩用所有的石头交互小 ...

  9. java中String,StringBuffer,StringBuilder的区别

    String: 1,是字符串常量,一旦创建就不能修改.对于已经存在了的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去. 2,String也是final类,不能被继承. 3,而且S ...

  10. windows 下 ctags 安装以及 tags 目录创建

    最近处理 .as 格式代码,需要转换成 c# 格式, 用 VS 查看,无法跳转,十分蛋疼,又用起了好久没用的 VIM,配置 tags 文件,实现自动跳转. 1.下载ctag文件http://ctags ...