JS对象

JS对象

1.对象属性

  • writable 是否可写

  • enumerable 是否可枚举

  • configurable 是否可重新设置

  • value 属性值
//
var person = { x : 1 }
console.log(Object.getOwnPropertyDescriptor(Object,'prototype'));//Object {value: Object, writable: false, enumerable: false, configurable: false}
console.log(Object.getOwnPropertyDescriptor(person,'x'));//Object {value: 1, writable: true, enumerable: true, configurable: true}
Object.defineProperty(person,'y',{value:2});
console.log(Object.getOwnPropertyDescriptor(person,'y'));//Object {value: 2, writable: false, enumerable: false, configurable: false}

2.对象方法

  • get/set
var man = {
    name: 'Bosn',
    weibo: '@Bosn',
    get age() {
        return new Date().getFullYear() - 1994;
    },
    set age(val) {
        console.log('Age can\'t be set to ' + val);
    }
}
console.log(man.age); // 25
man.age = 100; // Age can't be set to 100
console.log(man.age); // 25
  • hasOwnProperty
    hasOwnProperty判断是否为对象本身的属性。
function foo(){}
foo.prototype.z = 3;
var obj = new foo();
obj.x = 1;
obj.y = 2;

'z' in obj; // true
obj.hasOwnProperty('z');// false
delete obj.z; // true
console.log(obj.z); // 3 原型上的属性不能被删除,但不会报错
delete obj.x; // true
console.log(obj.x); // undefined
  • Object.create(obj)

Object.create(obj)是系统内置函数,参数obj为一个对象,其会返回一个新的对象,新对象的原型指向参数obj。

var obj = Object.create({x:1});
obj.x //1
typeof obj.toString; // "function"
obj.hasOwnProperty('x'); // false

var obj = Object.create(null);
typeof obj.toString; // undefined
  • getOwnPropertyDescriptor()
delete Object.prototype; // false

var descriptor = Object.getOwnPropertyDescriptor(Object, 'prototype');//获取Object的prototype的属性,当第二个参数不存在与第一个参数对象中,返回undefined
console.log(descriptor.configurable); // false
  • propertyIsEnumerable()是否可枚举
var cat = new Object();
cat.legs = 4;

cat.propertyIsEnumerable('legs'); // true
cat.propertyIsEnumerable('toString'); // false
  • defineProperty()自定义对象的属性

    Object.defineProperty(cat, 'price', {enumberable:false,value:1000});//设置对象cat的属性price为不可枚举,并赋值为1000
    cat.propertyIsEnumerable('price');//false
    cat.hasOwnProperty('price');//true
  • defineProperties 定义多个属性
var person = {};
Object.defineProperties(person, {
    title: { value: 'fe', enumerable: true },
    salary: { value: 50000, enumerable: true, writable: true},
    luck: {
        get: function() {
            return Match.random() > 0.5 ? 'good' : 'bad';
        }
    },
    promote:{
        set: function(level){
            this.salary *= 1 + level * 0.1
        }
    }
});
console.log(person.salary);//50000
person.promote = 2;
console.log(person.salary); //60000

3.对象标签

  • __proto__

  • class标签
var toString = Object.prototype.toString;
function getType(o){
    return toString.call(o).slice(8,-1);
}

toString.call(null);//"[object Null]"
getType(null);//"Null"
getType(undefined);//"Undefined"
getType(1);//Number
getType(new Number(1));//Number
typeof new Number(1);//object
getType(true);//Boolean
getType(new Boolean(true));//Boolean
  • extensible标签:对象是否可扩展,即对象上的属性是否可以继续添加。
var obj = {x : 1, y : 2};
    console.log(Object.isExtensible(obj));//true 默认值为true
    Object.preventExtensions(obj);//禁止对象属性扩展
    console.log(Object.isExtensible(obj));//false
    obj.z = 1;
    console.log(obj.z);//undefined 设置失败
    console.log(Object.getOwnPropertyDescriptor(obj,'x'));//Object {value: 1, writable: true, enumerable: true, configurable: true}

    Object.seal(obj);//将configurable设置为false
    console.log(Object.getOwnPropertyDescriptor(obj,'x'));//Object {value: 1, writable: true, enumerable: true, configurable: false}
    console.log(Object.isSealed(obj));//true

    Object.freeze(obj);//将writable和configurable设置为false
    console.log(Object.getOwnPropertyDescriptor(obj,'x'));//Object {value: 1, writable: false, enumerable: true, configurable: false}
    Object.isFrozen(obj);//true

4.对象序列化

  • JSON.stringify()JSON.parse()
//
var obj = {x: 1, y: true, z: [1,2,3], nullVal: null};
console.log(JSON.stringify(obj)); // "{"x":1,"y":true,"z":[1,2,3],"nullVal":null}"

obj = {val : undefined, a : NaN, b : Infinity, c : new Date()};
JSON.stringify(obj); // "{"a":null,"b":null,"c":"2015-01-20T14:15:43.910Z"}"
// 值为undefined的会被忽略,NaN转换为null,Infinity转换为null

obj = JSON.parse('{"x" : 1}');//属性x需被双引号包含着
obj.x; // 1

自定义序列化

var obj = {
    x : 1,
    y : 2,
    o : {
            o1 : 1,
            o2 : 2,
            toJSON : function () { //toJSON不能变
                    return this.o1 + this.o2;
            }
    }
};
console.log(JSON.stringify(obj)); // "{"x":1,"y":2,"o":3}"

其他对象方法

var obj = {x : 1, y : 2};
console.log(obj.toString()); // "[object Object]"
obj.toString = function() {return this.x + this.y};
console.log("Result " + obj); // "Result 3", by toString

console.log(+obj); // 3, from toString

obj.valueOf = function() {return this.x + this.y + 100;};
console.log(+obj); // 103, from valueOf

console.log("Result " + obj); // still "Result 3"
//valueOf与toString同时存在的时候,先调用valueOf,如果valueOf返回值不是基本类型,再调用toString,若toString返回不是基本类型,则报错.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript对象编程是指使用JavaScript语言创建和操作对象的过程。在JavaScript中,对象是一种复合数据类型,可以包含属性和方法。对象可以通过字面量、构造函数、原型等方式创建。通过对象编程,可以实现面向对象编程的思想,使代码更加模块化、可维护和可扩展。在JavaScript中,对象是非常重要的概念,掌握对象编程是成为一名优秀的JavaScript开发者的必备技能之一。 ### 回答2: JavaScript是一种流行的编程语言,其中面向对象编程(OOP)是其中的重要组成部分。对象是JavaScript编程中最重要的概念之一,它是一种数据类型,通过对象可以轻松地组织和管理数据。JS对象包含了一组属性和方法,可以用来描述某个对象的性质和行为。 在JavaScript中,对象是动态创建的。创建对象的方法有很多,其中最简单的就是使用字面量,例如: var person = { name: 'Tom', age: 20, gender: 'male', sayHi: function() { console.log('Hi, my name is ' + this.name + ',I am ' + this.age + ' years old.') } }; 上面的代码定义了一个名为person的对象,该对象具有属性name、age、gender和方法sayHi。使用字面量创建对象的好处是,可以轻松地在代码中定义对象,而无需使用专门的构造函数。 当然,也可以使用构造函数来创建对象,例如: function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.sayHi = function() { console.log('Hi, my name is ' + this.name + ',I am ' + this.age + ' years old.') } }; var person = new Person('Tom', 20, 'male'); 上面的代码定义了一个名为Person的构造函数,在创建对象时使用了new关键字来调用该构造函数,返回一个新的person对象。这个对象包含了属性name、age、gender和方法sayHi。 在JavaScript中,对象是可以嵌套的。可以在对象中嵌套其他对象,也可以在对象中嵌套函数,这些函数就是对象的方法。通过对象的嵌套,可以更好地管理数据,使程序更加规范和易于维护。 总之,JavaScript的对象编程是一种强大且灵活的编程方式,通过对象可以轻松地组织和管理数据,从而实现更好的开发效率和代码质量。由于JavaScript的广泛应用,对于对象编程的掌握将有助于开发者更好地掌握这门语言。 ### 回答3: 在JavaScript中,对象是一种基础数据类型,也是语法的重要组成部分。对象是由若干属性构成的,每个属性都是键值对的形式,其中键是字符串类型,值可以是任意的JavaScript数据类型,包括对象。通过定义对象的属性和方法,我们可以在JavaScript中创建功能强大的程序。 JavaScript对象编程有以下几个重要概念: 1. 对象字面量:使用“{}”来定义对象,字符:“:”分割键与值,“,”分割不同键值对。如:var obj = {name: "小明", age: 18}; 2. 访问对象属性:使用“.”操作符访问对象属性。如:obj.name 3. 新增属性:使用“.”或“[]”,如:obj.height = 180; 或 obj['sex'] = 'male'; 4. 删除属性:使用“delete”关键字,如:delete obj.age; 5. 遍历对象属性:使用“for...in...”语句遍历对象属性,如: for(var key in obj) { console.log(key + ": " + obj[key]); } 6. 面向对象编程:JavaScript中也可以实现面向对象编程。定义一个构造函数,然后使用“new”关键字创建对象实例,如: function Person(name, age) { this.name = name; this.age = age; this.sayHello = function () { console.log("Hello, my name is " + this.name + ", I'm " + this.age + " years old."); } } var p = new Person('小明', 18); p.sayHello(); // 输出:Hello, my name is 小明, I'm 18 years old. JavaScript对象编程是非常灵活的,我们可以根据需要动态地定义、操作对象,同时结合面向对象编程,使得JavaScript的代码结构更加清晰有序。掌握好JavaScript对象编程的技巧,可以让我们开发出更高效、更具有扩展性的项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值