JS高级(1)

目录

数据类型

分类

判断

问题

数据_变量_内存

数据

变量

内存

数据、变量、内存三者之间的关系:

问题

对象

问题

函数

回调函数

IIFE(匿名函数自调用)

函数中的this


数据类型

分类

  • 基本类型

String:任意字符串

Number:任意数字

boolean:布尔(true / false)

undefined:undefined

null:null

  • 对象类型

Object:任意对象

Function:一种特别的对象(可以执行)

Array:一种特别的对象(数值下标,内部数据是有序的)

判断

  • typeof:返回数据类型的字符串表达。可以判断undefined、数值、字符串、布尔值、function;不能判断null与Object、Object与Array
  • instanceof:判断对象的具体类型,function也可以用typeof来判断
  • ===:可以判断undefined、null

实例:

<script type="text/javascript">
        // typeof: 返回的是数据类型的字符串表达形式
        //基本类型
        var a;
        console.log(a, typeof a, a===undefined); // undefined 'undefined' true
        console.log(a===typeof a); // false

        a = 3;
        console.log(typeof a === 'number');
        a = 'xyy';
        console.log(typeof a === 'string');
        a = true;
        console.log(typeof a === 'boolean');

        a = null;
        console.log(a===null); // true
        console.log(typeof a); // 'object'

        console.log('--------------------------------');

        //对象类型
        var b1 = {
            b2: [2, 'abc', console.log],
            b3: function () {
                console.log('b3()')
            }
        };
        console.log(b1 instanceof Object, typeof b1); // true 'object'
        console.log(b1.b2 instanceof Array, typeof b1.b2); // true 'object'
        console.log(b1.b3 instanceof Function, typeof b1.b3); // true 'function'

        console.log(typeof b1.b2[2]); // 'function'
        console.log(b1.b2[2]('abc'));// 'abc' undefined
    </script>

问题

undefined与null的区别?

undefined代表定义未赋值;而null定义并赋值了,但值为null

什么时候给变量赋值为null呢?

初始赋值,表明将要赋值为对象;结束前赋值,让对象成为垃圾对象(被垃圾回收器回收)

严格区分变量类型与数据类型?

  • 数据类型

基本类型和对象类型

  • 变量类型

基本类型:保存的是基本类型的数据

对象类型:保存的是地址值


数据_变量_内存

数据

存储与内存中代表特定信息的东西称为数据,函数也是数据

数据的特点:可传递、可运算

程序中所有操作的目标:数据

算数运算、逻辑运算、赋值、调用函数传参

变量

值可以变化的量,由变量名和变量值组成。

一个变量对应一块小内存,变量名用来查找到内存,变量值就是内存中保存的内容。

内存

可存储数据的临时空间

内存的分类:

栈:全局变量、局部变量

堆:对象

数据、变量、内存三者之间的关系:

内存是一个容器,用来存储程序运行需要操作的数据;变量是内存的标识,我们通过变量找到对应的内存,进而操作(读 / 写)内存中的数据。

问题

关于赋值与内存的问题?

var a=xxx,a内存中到底保存的是什么?

三种情况:

  • xxx是一个基本数据,保存的就是这个数据
  • xxx是一个对象,保存的是对象的地址值
  • xxx是一个变量,保存的是xxx的内存内容(可能是基本数据类型,也可能是地址值)

关于引用变量赋值的问题?

  • 两个引用变量指向同一个对象,通过变量修改对象内部数据,另一个变量看到的是修改后的数据。
  • 两个引用变量指向同一个对象,让其中一个变量指向另一个对象,另一个引用变量依然指向前一个对象。

在JS调用函数传递变量参数时,是值传递还是引用传递?

都是值传递

JS引擎如何管理内存?

  • 内存生命周期

分配小内存空间,得到它的使用权;存储数据,可以反复进行操作;释放小内存空间

  • 释放内存

局部变量:函数执行完自动释放

对象:成为垃圾对象


对象

多个数据的封装体(用来保存多个数据的容器)

对象的组成:属性和方法

问题

什么时候必须使用['属性名']的方式?

  • 属性名包含特数字符:-、空格
  • 属性名不确定

函数

实现特定功能的n条语句封装体。只有函数时可以执行,其他类型的数据不能执行

函数的三种不同种类

一般函数:直接调用

构造函数:通过new调用

对象:通过 . 调用内部属性或方法

回调函数

回调函数要满足三个条件:

1.你定义的        2.你没有调用        3.但最终执行了

常见的回调函数:

  • dom事件回调函数:回调函数中的this为发生事件的dom元素
  • 定时器回调函数:回调函数中的this为window
  • ajax请求回调函数
  • 生命周期回调函数

IIFE(匿名函数自调用)

全称:Immediately-Invoked Function Expression 立即调用函数表达式

作用:

  • 隐藏实现
  • 不会污染外部(全局)命名空间
  • 用它来编写JS模块
<script type="text/javascript">
        (function (){ //匿名函数自调用
            console.log("……");
        })();


        (function () {
            var a = 1;

            function test() {
                console.log(++a);
            };
            window.$ = function () { //向外暴露一个全局函数
                return {
                    test: test
                };
            };
        })();

        $().test();//①$是一个函数;②$执行后返回的是一个对象

    </script>

函数中的this

  • test()    window
  • p.test()    p
  • new test()    新创建的对象
  • p.call(obj)    obj
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值