• 基础总结深入:数据类型的分类和判断(数据、内存、变量) 对象 函数 回调函数 IIFE 函数中的this 分号


    数据类型的分类和判断

    基本(值)类型----值----判断

    Number ----- 任意数值 -------- typeof
    String ----- 任意字符串 ------ typeof
    Boolean ---- true/false ----- typeof
    undefined --- undefined ----- typeof/===
    null -------- null ---------- ===

    对象(引用)类型----值----判断

    Object ----- 任意对象 ---- typeof/instanceof
    Array ------ 一种特别的对象,可以执行 ---- instanceof
    Function ---- 一种特别的对象,数值下标,内部数据是有序的 ---- typeof

    判断

    typeof
    可以判断:undefined/数值/字符串/布尔值/function(例如:typeof a === "undefined"/a === undefined)
    不可以判断:null与object       array与object
    instanceof
    判断对象的具体类型
    ===
    可以判断:undefined/null

    注意

    函数加()来执行,()前是函数。
    对象不可以执行,对象用来存数据,函数存的是代码数据,所以可以执行。
    instanceof 用来检查一个对象是否是一个类的实例。
    console.log方法可以接受一个或多个参数,将它们连接起来输出。(参数用","隔开,因为它是函数)
    typeof返回一个描述类型的字符串。
    类是个对象(类型对象),类就是构造函数。

    undefined与null的区别?

    undefined代表定义未赋值
    null代表定义并赋值了,只是值为null

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

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

    严格区分变量类型和数据类型?(了解即可,一般不区分,变量本身是没有类型的)

    数据的类型
    基本类型
    对象类型
    变量的类型(变量内存值的类型)
    基本类型:保存的是基本类型的数据
    引用类型:保存的是地址值

    数据、内存、变量

    1.什么是数据?

    存储在内存中代表特定信息的“东东”,本质上是0101...
    数据的特点:可传递,可运算
    一切皆数据
    内存中所有操作的目标:数据
    操作:算术运算、逻辑运算、赋值、运行函数

    2.什么是内存?

    内存条通电后产生的可存储数据的空间(临时的)
    内存产生和死亡:内存条(电路板)——>通电——>产生内存空间——>存储数据——>处理数据——>断电——>内存空间和数据都消失
    一块小内存上的2个数据:内部存储的数据、地址值
    内存分类
    栈:全局变量、局部变量(空间较小)
    堆:对象(空间较大)

    3.什么是变量?

    可变化的量,由变量名和值组成
    每个变量都对应一块小内存,变量名用来查找对应内存,变量值就是内存中保存的数据

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

    内存用来存储数据的空间
    变量是内存的标识,我们通过变量找到对应的内存,进而操作(读/写)内存中的数据

    注意

    变量之间的赋值,就是原变量的值拷贝一份给新变量。
    对象里的属性名不是全局变量或局部变量。
    函数名在栈空间,函数在堆空间,对象在堆空间,标识这个对象的变量在栈空间。
    永久空间是硬盘,代码文本(文本就是一个大的数据串,有特定格式,按照语法规则写才可以解析)从硬盘加载到内存空间来执行。

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

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

    关于引用变量赋值问题

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

    在js调用函数传递变量参数时,是值传递还是引用传递?
    理解1:都是值(基本/地址值)传递
    理解2:可能是值传递,也可能是引用传递(地址值)

    JS引擎如何管理内存?
    1.内存生命周期
    分配小内存空间,得到它的使用权(分配内存:声明变量和函数或创建对象时,JS引擎会自动为此分配一定大小的内存来存放对应的数据)
    存储数据,可以反复进行操作
    释放小内存空间(释放内存:清空内存中的数据,标识内存可以再分配使用,内存不释放就不能复用)
    2.释放内存
    局部变量:函数执行完自动释放
    对象:成为垃圾对象——>某个时刻由垃圾回收器回收

    对象

    1.什么是对象?

    多个数据的封装体
    用来保存多个数据的容器
    一个对象代表现实中的一个事物

    2.为什么要用对象?

    统一管理多个数据

    3.对象的组成

    属性:属性名(字符串)和属性值(任意)组成

    代表现实事物的状态数据

    方法:一种特别的属性(属性值是函数)

    代表现实事物的行为数据 

    4.如何访问对象内部数据?

    .属性名:编码简单,有时候不能用
    ["属性名"]:编码简单,能通用

    什么时候必须使用["属性名"]的方式?
    (1)属性名包含特殊字符:- 空格(["属性名"])
    (2)属性名不确定,属性名是一个变量([属性名])

    函数

    1.什么是函数?

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

    2.为什么要用函数?

    提高代码复用
    便于阅读交流

    3.如何定义函数?

    函数声明
    表达式

    4.如何调用(执行)函数?

    test():直接调用
    obj.test():通过对象调用
    new test():new调用
    test.call/apply(obj):临时让test成为obj的方法进行调用,可以让一个函数成为指定任意对象的方法进行调用

    注意

    形参的本质就是一个局部变量
    实参的本质就是一个数据(一个变量的值),传实参就是传一个值

    回调函数

    1.什么函数才是回调函数?

    (1)你定义的
    (2)你没有调用
    (3)但它最终执行了(在某个时刻或条件下)

    2.常见的回调函数?

    dom事件回调函数--------------------与用户交互的关键

    1 document.getElementById("btn").onclick = function () {
    2     alert(this.innerHTML);
    3 }

    定时器回调函数

    1 setTimeout(function () {
    2     alert("到点了");
    3 }, 2000)

    ajax请求回调函数(后面讲)--------------------与后台交互的关键
    生命周期回调函数(后面讲)

    IIFE

    1.理解

    英文全称意思为:立即执行函数(也叫匿名函数自调用)

    2.作用

    隐藏实现
    不会污染外部(全局)命名空间
    用它来编写js模块

    1 (function () {
    2     var a = 3;
    3     console.log(++a);
    4 })()

    函数中的this

    1.this是什么?

    任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
    所有函数内部都有一个变量this,它的值是调用函数的当前对象

    2.如何确定this的值?

    test():window
    p.test():p
    new test():新创建的对象(不懂看js基础笔记中的构造函数执行流程)
    p.call(obj):obj
    dom事件回调函数中的this:发生事件的dom元素对象
    定时器回调函数中的this:window

    分号

    1.js一条语句的后面可以不加分号
    2.是否加分号是编码风格问题,没有应不应该,只有你自己喜不喜欢。
    3.在下面2种情况下不加分号会有问题
    (1)小括号开头的前一条语句
    (2)中括号开头的前一条语句
    4.解决办法:在行首加分号。
    5.强有力的例子:vue.js库
    6.return、break和continue如果这三个关键字后面跟着换行,js引擎会在换行处填补分号,可以添加括号解决。

    学识浅薄,如有错误,恳请斧正,在下不胜感激。

  • 相关阅读:
    正则表达式
    http协议组成(请求状态码)
    谈一谈你对js线程的理解
    CSS 中定位方式有几种,说明他们的意义
    手机端白屏前端优化的方法,5 种以上
    用 js 写一个获取随机颜色的程序
    如何获取本地存储信息
    cuda 版本查阅
    ubuntu16.04 ROS安转及RVIZ启动
    Tensorflow和Caffe 简介
  • 原文地址:https://www.cnblogs.com/yin-jie/p/14737059.html
Copyright © 2020-2023  润新知