js的对象

本文深入探讨JavaScript中变量作用域的问题,包括局部变量与全局变量的混淆,函数声明与表达式的区别,以及如何正确检查对象属性。此外,还详细解析了对象属性的定义、标签设置及序列化方法,帮助读者全面掌握JS对象操作。
//1 创建变量坑 会将局部变量暴露为全局变量
        function foo(){
            var aa=bb=2;//这种创建方法导致bb是一个全局变量
            console.log(aa,bb);
        }
        foo();
        console.log(typeof aa);//undefined
        console.log(typeof bb);//number

        //8  函数声明和函数表达式的不同
        // func1();//函数声明会预先被处理 所以可以在前面调用
        // func2();//函数表达式预先不会被处理 所以不可以在前面调用 会报错
        // function func1(){

        // }

        // var func2=function(){

        // }
        //

        //2  检验对象上的属性
        var obj = Object.create({x:11});//说明创建一个原型链上的对象
        console.log(obj.hasOwnProperty("x"));//false
        console.log("x" in obj);//true

        function Cat(){

        }
        var cat1=new Cat();
        console.log(Cat.prototype.__proto__.__proto__);//null
        cat1.legs="4";
        cat1.mouse="1";
        //for...in语句以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
        //使用hasOwnProperty方法会筛选出原型对象的属性 
        for (const key in cat1) {
            if (cat1.hasOwnProperty(key)) {
                const element = cat1[key];
                console.log(element);
            }
        } 

     

        //3
        function foo(){

        };
        Object.defineProperty(foo,"z",{
            value:100,
            writable:true //设置为true就是可写的 可修改 设置为false就是不可写 不可修改 默认是false
        })
        var obj=new foo();
        obj.z=1
        console.log(obj.z);

        //4 使用Object.create创建对象 是prototype
       var t=Object.create({name:"tom"});
       console.log(t.__proto__.name);//tom

       var ttt={
           $age:111,
           get age(){
               return this.$age
           },

           set age(val){
               return this.$age=val
           }
       }

       console.log(ttt.age);//111
       ttt.age=10;
       console.log(ttt.age);//10
       //14 js的属性标签
       var tt={};
       Object.defineProperty(tt,"name",{
           value:"张三",
           enumerable:false,  //可枚举属性 是否可以被for in循环得到默认是false 
           configurable:false,//是否可以被delete运算符删除 默认是false
           writable:false     //是否可修改 默认是false
       });
       //可以同时定义多个属性
       Object.defineProperties(tt,{
           age:{value:11},
           ishuman:{value:false},
           salary:{value:100000,writable:true},
           promote:{
               set:function(level){
                   this.salary*=1+level*0.1 
               }
           },
       })
       console.log(tt.salary+"====");//100000
       tt.promote=10 //把salary属性加上writable:true标签后 这个属性才可以被修改
       console.log(tt.salary);//200000 
       console.log(tt.hasOwnProperty("name"));//true 说明通过defineProperty创建的对象属性不是prototype属性
       //使用getOwnPropertyDescriptor可以得到一个对象的属性的详细标签情况 
       console.log(Object.getOwnPropertyDescriptor(tt,"name"));//{value: "张三", writable: false, enumerable: false, configurable: false}
    

       var tttt={name:"tom",age:"s11"};
       console.log(Object.getOwnPropertyDescriptor(tttt,"name"));//{value: "tom", writable: true, enumerable: true, configurable: true}
       Object.freeze(tttt);
       console.log(Object.getOwnPropertyDescriptor(tttt,"name"));//{value: "tom", writable: false, enumerable: true, configurable: false}
                                                                 //此时的writable和configurable属性变成false 这个属性不可修改和删除
    
                                                                      
       //5 对象的序列化和可定制化
       var json={
           x:"x",
           y:"y",
           o:{
               o1:"o1",
               o2:"02"
           }
       }

       console.log(JSON.stringify(json));//{"x":"x","y":"y","o":{"o1":"o1","o2":"02"}}
       json={
           x:"x",
           y:"y",
           o:{
               o1:"o1",
               o2:"02",
               toJSON:function(){  //固定表达 只能是toJSON
                   return this.o1+this.o2
               }
           }
       }
       console.log(JSON.stringify(json));//{"x":"x","y":"y","o":"o102"}

 

### 回答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对象编程的技巧,可以让我们开发出更高效、更具有扩展性的项目。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值