js的学习之对象

1.作用域及使用

    <script>

        // var age = 18  //全局作用域
        // function fn() {
        //     var age = 20
        // }
        // fn()
        // console.log(age)
        // console.log(fn(age))

        // 变量作用域:全局作用域和局部作用域下可以定义相同的变量名,不会出现变量覆盖的情况下
        /*
            全局变量:在全局作用域下的变量
                            // 特点:代码在任何位置都可以使用
                                    // var 声明的变量是全局作用域(在全局作用域下)
            局部变量:在局部作用域下的变量
                            // 特点:局部变量只能在该函数使用
                                    // var在局部作用域下定义的变量就是局部变量
                        局部作用域下只会在局部作用域下查找需要的变量,如果局部作用域没有这个变量,会向全部作用域查找
        
        */
        // 函数中的形参是局部变量
        // 全局变量只有在浏览器关闭的时候才会销毁,局部变量在函数运行结束后才会销毁
        // var num = 20  //全局变量
        // function fn() {
        //     console.log(num);
        //     var num = 30//局部变量
        //     // console.log(num);
        // }
        // fn()
        // // console.log(num);
        var a = 10
        console.log(a);
        function fun() {
            alert(a)
            var a = 20
            alert(a)
        }
        fun2()

2.作用域链

作用域链:函数之间的链条,也就是说一个函数可以访问宁一个函数内的变量(内部函数可以访问外部函数的变量 , 外部函数没办法访问内部函数的变量 , 每个函数都是独立的作用域 , 但是内部函数属于外部函数)

        采取的是就近原则

       

        如果函数内套函数,两个函数都需要调用,否则不调用的函数不会执行

案列:

<script>

        function fn() {
            var num = 20
            console.log(num);
            function fn1() {
                var age = 30
                console.log(age);
            }
        }
        fn()
    </script>

3.js的预解析(重要)

// 预解析:js代码是由浏览器中的js解析器进行执行的

        /*

            ja代码执行分两步: 1.预解析  2.执行代码

       

        */

        //    代码是自上而下执行的

        // 预解析“是在当前作用域下,js代码执行之前,浏览器会默认把带有var 以及function 声明的变量在内存中提前声明

        // 声明在整个作用域最前面

4.对象(重点)

 

        // 对象:万物皆对象

        /*

                1.new关键字

                2.字面量

       

        */

        //    1.new关键字

        // var obj = new Object()

        // console.log(obj);

        // // 字面量

        // var obj = {}

        // console.log(obj);

        // 为什么需要对象,它是可以保存一个人的完整信息

        // 给对象里面存东西时 是 对象名.属性名=属性值

        // 对象里面时属性名: 属性值  存在

        var uname = '张三'

        var age = 18

        var sex = '男'

        var obj = {}

        obj.uname = '张三'

        obj.age = 18

        obj.sex = '男'

        console.log(obj)

 5.基本数据类型和引用数据类型

  基本数据类型值是存在栈里,引用数据类型值是存在堆里,栈里直接通过url地址指向堆里的值,所以在改变引用数据类型时,赋值给其他引用数据类型的值也会改

6.对象的特点

<script>



 

        /*

            对象:把相关的属性和方法放在一起的集合

                对象需要属性名和属性值(键值对,键:name,值:'张三')

                对象的属性名没有特殊要求

                通过 属性名.属性值 给对象添加数据时,属性名不能是数字,否则会报错

                可以通过 对象名['属性名'] 来添加数据    

                如果通过 对象名['属性名'] 的方式添加了数字型的大属性名时,需要用 对象名['属性名'] 来获取属性值

        */

        var obj = {

            name: '张三',

            111: 123456

        }

        obj[111] = '你好'

        var arr = ['张三', '18', '男']

        console.log(obj[111]);

        console.log(obj);

    </script>

7.三种对象创建方式 

三种创建方式

               1.字面量

               var obj={

                   name:'张三',

                   age:18,

                   getStudy:function(){

                       console.log('学习使我快乐')

                   }

               }

               obj.getStudy()

               2.new关键字

               var obj=new Object()

               obj.name='张三'

               obj.age=18

               obj.getStudy=function(){

                   console.log('学习使我快乐')

               }

               obj.getStudy()

       

               3.构造函数:函数名首字母一定要大写  需要new 构造函数()调用

             function Get(name, age) {

             this.name = name

            this.age = age

         }

        var obj = new Get('张三', '18')

        console.log(obj);

8.判断对象中的属性

    <script>
        // 1.字面量
        var obj = {
            name: '张三',
            age: 18,
            getStudy: function () {
                console.log('学习使我快乐')
            },
            son: {
                name: '王五',
                age: 18
            }
        }
        console.log(obj);
        // in 判断对象里是否有某个属性名 '属性名' in 对象名
        // 返回值是true和false true代表有此属性名,false代表无属性名
        // 属性名一定要有引号
        console.log('name' in obj);
        console.log('sex' in obj);//true
    </script>

 9.遍历对象

// 遍历对象  for  ...in 也可以遍历数组 k代表属性名

        // 对象由属性名属性值组成  键值对  key value

        /*         var obj = {

                    name: '张三',

                    age: 18,

                    sex: '男'

                }

                for (k in obj) {

                    // console.log(k);

                    console.log(obj[k]);

                } */

        // for in 遍历数组时,k代表数组的索引

        // var arr = [1, 2, 3, 4, 5]

        // for (a in arr) {

        //     // console.log(a);

        //     console.log(arr[a]);

        // }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值