回顾基础学习笔记:对象Object(一)

对象(Object)

一些平常的笔记,希望有所帮助

含义

可以理解为:一组"键值对"(key-value)的集合,是一种无序的复合数据集合。

let obj = {
   foo:"Hello",
   bar:"world"
}
//对象的所有键名都是字符串(ES6又引入了Symbol值也可以作为键名)
//所以不加引号也行
let obj2 = {
   "foo":"Hello",
   "bar":"World"
}

对象的所有键名都是字符串,不用引号也是可以的。

如果键名是数值 会被自动转为字符串

var a = {
    1: 'a',
    3.2: 'b',
    1e2: true,
    1e-2: true,
    .234: true,
    0xFF: true
};
console.log(a)
/* Object {
  1: "a",
  3.2: "b",
  100: true,
  0.01: true,
  0.234: true,
  255: true
}*/

console.log(a["100"]);// true
//看上去键名是数值,但是会全部自动转换为字符串

看上面键名是数值,但是会全部自动转换为字符串

键名不符合标识符,必须加上引号否则会报错

// 不报错
let b = {
   '1p': 'Hello World',
   'h w': 'Hello World',
   'p+q': 'Hello World'
};

对象的每一个键名又称为“属性(property)”,他的键值(value)可以是任何数据类型

let c= {
   p: function (x) {
        return 2 * x;
    }
};
console.log(c.p(3));//6
// c对象的属性p,指向一个函数

上面c对象的属性p,指向一个函数

对象也可以动态创建,不必在对象声明时就指定

let d = {};
d.foo = 123;
console.log(d.foo);//123

1.1属性的读取

let e = {
   p:"hello world"
}
console.log(e.p);//hello world
console.log(e["p"]);//hello world  

使用[]时键名必须放在引号里面,否则会被当做变量处理

let f = {
    123: 'hello world'
};

// fff.123 // 报错
f[123] // "hello world"

数字键可以不用引号。但是不能用点运算

1.2属性的查看

// js允许属性后绑定
let g = {};
g.foo = "Hello";
g["bar"] = "World";
let h ={p:1};
//等价于
let j={};
j.p =1;

1.3属性的查看

let i = {
    key1:1,
    key2:2
}
console.log(Object.keys(i));

1.4属性的删除

let k={p:1};
console.log(Object.keys(k));//["p"]
delete k.p;
console.log(k.p);//1
console.log(Object.keys(k));//[]

值得注意的,删除不存在的属性,照样返回true

let l = {};
console.log(delete obj.p);//true

注意:delete无法删除继承属性

1.5判断属性是否存在

// in运算符有一个问题,他不能识别哪些属性是对象自身的,哪些是继承的
let m = {p:1};
console.log("p" in m);//true
console.log('toString' in m);//true
// 这时需要hasOwnProperty的方法判断一下,是否为对象自身属性
let n ={};
 if('toString' in obj){
     console.log(n.hasOwnProperty('toString'));//false
 }

1.6属性的遍历

var o = {a: 1, b: 2, c: 3};

for (let i in o) {
console.log('键名:', i);
console.log('键值:', o[i]);
}
// 键名: a
// 键值: 1
// 键名: b
// 键值: 2
// 键名: c
// 键值: 3

// for  in需要注意的两个点
// 1:他遍历的是对象所有可遍历的属性,会跳过不可遍历的属性
// 2:不仅遍历自身的属性,还遍历继承的属性

只遍历自身属性

let person = {name:"123"}
for(let key in person){
    if(person.hasOwnProperty(key)){
        console.log(key);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43485006/article/details/100042472