对象(概念+增删查改)

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6     <script type="text/javascript">
 7     /*
 8     对象的分类:
 9     1.内建对象
10       由ES标准中定义的对象,在任何的ES的实现中都可以使用
11       比如 Math String Number Boolean Function Object 
12       
13     2.宿主对象
14       由JS的运行提供的对象,目前来讲指由浏览器提供的对象
15       比如 BOM DOM
16       
17     3.自定义对象
18     由开发人员自己创建的对象
19    */
20   
21   /*
22   在对象中保存的值称为属性
23   向对象添加属性
24   语法 对象.属性名 = 属性值;
25   读取对象中没有的属性,不会报错而是会返回undefined
26   
27   修改属性值
28   对象.属性名=新值;
29   
30   删除对象的属性
31   真删除:delete 对象.属性名; delete 对象[]
假删除:利用访问对象不存在的成员,返回undefined的特征,我们把某个成员的值修改为undefined,这样以后再获取这个成员,结果也是undefined,我们可认为为当前成员是不存在的,本质是存在的
32 33 使用new关键字调用的函数,是构造函数constructor 34 构造函数是专门用来创建对象的函数 35 */ 36 var obj=new Object(); 37 obj.name="wxy"; 38 </script> 39 </head> 40 <body> 41 </body> 42 </html>
/*
 * 对象数据类型
 *   + 普通对象 {} 「类数组、实例、原型对象...」
 *   + 数组对象 []
 *   + 正则对象 /^$/
 *   + 日期对象
 *   + Set/Map
 *   + ...
 */

// 特殊对象:数组或者类数组对象(集合)
//  + 属性名(成员/键)是数字,而且数字从零开始,逐级递增  =>有顺序和规律的数字属性名被称为“索引”:记录每一项的位置信息的
//  + 有一个length成员,存储集合的长度

// “数组/类数组[索引]” 进行成员访问以及相关的操作

/* 
// 数组 =>它是Array类的实例
var arr = [10, 20, 30];
console.log(arr[0]); //获取第一项的值
console.log(arr[arr.length - 1]); //获取最后一项的值
console.log(arr); 
*/

/* 
// 类数组(类似于数组,但是不是数组) =>不是Array的实例,虽然结构类似,但是不能直接使用数组的办法
var obj = {
    0: 10,
    1: 20,
    2: 30,
    length: 3
};
console.log(obj);

// HTMLCollection元素集合:类数组
console.log(document.getElementsByTagName('*'));
// NodeList节点集合:类数组
console.log(document.querySelectorAll('*'));
*/

//-------------
/* 
 * ==普通对象== 
 *  1. 对象是由零到多组“键值对”(属性名和属性值)组成的
 *     {key:value,...}
 *     + 属性名(键)不是变量,它是对象的一个属性(特征)
 *     + 属性名一般都是一个字符串(当然也可以是数字或者Symbol等基本类型的值)
 *     + 属性名不能是对象,对象作为属性名,浏览器会把其转换为字符串
 */
/* 
// 管理一个对象的成员
//   + 直接编写在大括号中的(对于Symbol或者对象类型的属性名,再以及需要把一个变量存储的值作为属性名,需要基于中括号包裹起来,保证语法的正确性)
//   + 基于JS动态管理成员(新增/修改/删除)
//     + 对象的成员是不允许重复的(0和'0'是按照相同的成员处理的),在动态管控的时候,之前有这个成员则是修改成员的属性值,没有这个成员才是给对象新增一个成员
var symb = Symbol('xx');
var obj = {
    name: '珠峰培训',
    0: 10
};
obj.age = 11;
obj["age"] = 11;
obj[symb] = 'xxx'; //-> obj[Symbol(xx)]='xxx'

obj['name'] = "周啸天";
console.log(obj[0]); //10
console.log(obj["0"]); //10 如果成员名是数字,用字符串或数字访问都是可以的

// 假删除:利用访问对象不存在的成员,返回undefined的特征,我们把某个成员的值修改为undefined,这样以后再获取这个成员,结果也是undefined,我们则可以认为当前成员是不存在(本质还是存在的)
// obj.name = undefined;

// 真删除:彻底从对象中移除这个成员
// delete obj["name"];

console.log(obj);
*/

/* var symb = Symbol('xx');
var obj = {
    name: '珠峰培训',
    0: 10,
    // symb: 'xxx', //这样处理,属性名就是"symb",而不是这个变量存储的值
    [symb]: 'xxx' //这样处理,属性名是Symbol(xx),等同于把变量存储的值作为属性名
};
console.log(obj[symb]); //'xxx' */

//-------------
/* 
var x = 10;
var obj = {
    x: "珠峰培训",
    10: 100
};
console.log(obj.x); //访问当前对象属性名是"x"对应的属性值 ->"珠峰培训"
console.log(obj['x']); //和上面操作是一个意思,也是访问"x"的属性值 ->"珠峰培训"
console.log(obj[x]); //首先获取x变量存储的值,把存储的值作为属性名,进行对象的成员访问 -> obj[10] ->100
// 'x' 字符串类型的值
// x 它不是值,它是一个变量,代表存储的10
// + obj[值] 直接是对象的成员访问
// + obj[变量] 首先获取变量值,然后把变量存储的值作为属性名,再进行对象的成员访问 
*/

//-------------
/* 
// 获取一个对象中某个属性名对应的属性值 “对象的成员访问”
//  + 对象.属性名
//    + 这种方式不适用于“数字或者Symbol的类型”的属性名,这样的情况只能基于 对象[属性名] 来访问
//  + 对象[属性名]
//    + 这种方式必须指定好属性的类型  “obj[name] 和 obj["name"] = obj.name不是一个情况”
var obj = {
    name: '珠峰培训',
    0: 100
};
console.log(obj.name); //'珠峰培训'
console.log(obj["name"]); //'珠峰培训'
console.log(obj[0]); //100
// console.log(obj.0); //Uncaught SyntaxError: missing ) after argument list,如果属性名是数字的话,只能用上述方法

console.log(obj.age); //访问对象的某个成员,如果当前成员没有在对象中,不会报错,访问到的结果是undefined而已
console.log(age); //如果是访问一个不存在变量,则会报错 Uncaught ReferenceError: age is not defined 
*/

//-------------
/* var x = {
    xx: 'xxx'
};

var y = {
    // name叫做属性名,此处本身也是一个字符串 "name"
    // "珠峰培训"是当前name属性的属性值
    name: "珠峰培训",
    age: 11,
    0: 100,
    // 对于Symbol类型的属性名,需要基于[]包裹起来,保证语法正确性
    [Symbol('AA')]: 200,
    // 属性名不是这个对象,而是变为最后的字符串 ({xx:'xxx'}).toString() => "[object Object]"
    [{xx:'xxx'}]:300,
    // x->"x"
    x: 300
};
console.log(y);
//y["[object Object]"] --300
*/

对象是由零到多组“键值对”(属性名和属性值)组成的
+属性名(键)不是变量,它是对象的一个属性(特征)
+属性名一般都是一一个字符串(当然也可以是数字或者Symbol等基本类型的值)
+属性名不能是对象或者函数,对象或者函数作为属性名,浏览器会把其转换为字符串作为属性名

特殊对象:数组或者类数组对象(集合)
+属性名(成员/键)是数字,而且数字从零开始,逐级递增 =>有顺序和规律的数字属性名被称为“索引":记录每一 项的位置信息的
+有一个length成员,存储集合的长度
“数组/类数组[索引]”进行成员访问以及相关的操作

原文地址:https://www.cnblogs.com/zuiaimiusi/p/11218598.html