JavaScript之变量和对象篇

207 阅读4分钟

变量和对象

原始类型(基本类型,不可再细分):number、string、boolean、null、undefined

引用类型:object、function 函数

在变量中存放对象

var obj = {};
  1. 通过变量,读取对象中的某个属性
变量名.属性名
        var user = {
            name: 'wjh',
            age: 18,
            sex: '男',
            girlFried: {
                name: 'xmg',
                age: 19,
                sex: '女'
            }
        }
        console.log(uesr, typeof user);
        console.log(user.name, typeof user.name); //读取user里面的name属性
        console.log(user.girlFried, typeof user.girlFried); //读取user里面的girlFriend属性

当读取的属性不存在时,会得到undefined

        var user = {
            name: 'wjh',
            age: 18,
            sex: '男',
            girlFried: {
                name: 'xmg',
                age: 19,
                sex: '女'
            }
        }
        console.log(user.address); // undefined 访问对象中没有的属性会得到undefined

当读取属性的对象不存在(undefined 或 null)时,程序报错

        var user2;
        console.log(user2.name); // 报错 --> undefined.name undefined是原始值不可再细分,无属性会报错

        var user3 = undefined;
        console.log(user3.name); // 报错

        var user4 = null;
        console.log(user4.name); // 报错
        // 访问undefined 和 null 中属性, 会报错
  1. 通过变量,更改对象中的某个属性

当赋值的属性不存在时,会添加属性

        var user = {
            account: "abc",
            pwd: "123456",
            gender: "男",
            isVip: false,
            age: 18
        };
        user.pwd = "654321"; //将密码修改成了654321
        console.log(user, user.pwd);
        user.skill = "qwer";
        console.log(user, user.skill, typeof user.skill);//user中不存在 skill那么访问没有的就会给其加上这个属性
        var user = {
            account: "abc",
            pwd: "123456",
            gender: "男",
            isVip: false,
            age: 18,
            address: {
                country: "中国",
                city: "成都"
            }
        };
        //输出用户的所在城市
        console.log(user.address.city);
        var user1 = {
            account: "abc",
            pwd: "123456",
            gender: "男",
            isVip: false,
            age: 18,
            address: {
                country: "中国",
                city: "成都"
            }
        };

        var user2 = {};
        user2.addr = user1.address;

        console.log(user2, user1);

        // var user2 = {
        //     account: user1.account
        // };

        // console.log(user1.account, user2.account);
        // console.log(user2.pwd);

  1. 删除属性
delete 变量名.属性名;
        var user = {
            account: "abc",
            pwd: "123456",
            gender: "男",
            isVip: false,
            age: 18,
            address: {
                country: "中国",
                city: "成都"
            }
        };
        delete user.account; // 删除user中的account属性
        console.log(user);
        // delete一般用的不多,一般在做项目开发时,如果想删除其都将其值改为undefined
        user.account = undefined; //这样这个属性不会被删除,只是值为undefined。 delete的话对象中的该属性会直接被删除
  1. 属性表达式

给属性赋值,或读取属性时,可以使用下面的格式操作

对象变量["属性名"]

对象中的属性名本身也是字符窜形式。

使用属性表达式能更灵活的获取属性。

        var user = {
            account: "abc",
            pwd: "123456",
            gender: "男",
            isVip: false,
            age: 18,
            address: {
                country: "中国",
                city: "成都"
            }
        };
        //用属性表达式读取用户的性别属性
        var prop = "account"; // 可以随意修改prop中的值,将其当做一个变量来操作
        // console.log(user.gender);
        console.log(user[prop]);
        console.log(user.prop); // undefined 因为对象中没有prop属性
        var obj = {
            "? asdf sdfsgf sd sdf ": 123,
            0: 'hhh'
        };
        console.log(obj["? asdf sdfsgf sd sdf "]); // 用obj.xxx的方式就没有办法获取
        // console.log(obj["0"]);
        // console.log(obj["0"]); // 宿主环境会自动将数字转换为字符串
  • 某些属性名中包含特殊字符

实际上,JS对属性名的命名要求并不严格,属性可以是任何形式的名字

属性的名字只能是字符串,如果你书写的是数字,会自动转换为字符串

来一到面试题

        var obj = {};
        obj[0] = "123"; // {  "0": "123" }
        obj["0"] = "234"; // { "0": "234" }
        console.log(obj[0], obj["0"]); //"234" "234"
        // 考察点: *属性的名字只能是字符串,如果你书写的是数字,会自动转换为字符串

全局对象

JS大部分的宿主环境,都会提供一个特殊的对象,该对象可以直接在JS代码中访问,该对象叫做全局对象.

在浏览器环境中,全局对象为window,表示整个窗口。

全局对象中的所有属性,可以直接使用,而不需要写上全局对象名。

开发者定义的所有变量,实际上,会成为window对象的属性。

        var age;
        console.log(window);
        // console.log(age) == > console.log(window.age);

如果变量没有被赋值,则该变量不会覆盖window对象上的同名属性。

        var age;
        console.log(window);
        // console.log(age) == > console.log(window.age);

        // var console = undefined; // console本来window上有这个属性,现在把其原来是给覆盖了。 所以一般避免使用window上已有的属性,导致原有功能不能使用
        // var alert; //本来widow上有的变量,如果只是声明了并没赋值,那么也不会覆盖window上的属性。如果赋值那么就会覆盖
        // console.log(alert);
        var name = 123;
        console.log(name, typeof name); //123 string  name经过了特殊处理,类型都是string