美文网首页
JavaScript数据类型

JavaScript数据类型

作者: Lnevan | 来源:发表于2021-07-07 17:56 被阅读0次

基本数据类型:

  • String
  • Number
  • Boolean
  • Undefined
  • Null
  • Symbol
  • BigInt

对象类型

  • Object:任意对象
  • Array: 一种特别的对象(拥有数值下表,内部数据是有序的)
  • Function: 一种特别的对象(可以执行)

判断数据类型的方法

  • typeof
    • 返回数据类型的字符串表达式(全小写)
    • 无法区分object和null,object和array(都返回object)
  • instanceof
    • 判断对象的具体类型
    • 用来判断A是否为B的实例,表达式为:A instanceof B,如果A是B的实例,则返回true,否则返回false。instanceof检测的是原型,内部机制是通过判断对象的原型链中是否有类型的原型
  • ===
    可以判断undefined,null
  • Object.prototype.toString()
    Object.prototype.toString.call('') //[object String]最准确的判断方法
  • constructor
    • 当一个函数F被定义时,JS引擎会为F添加prototype原型,然后在prototype上添加一个constructor属性,并让其指向F的引用,F利用原型对象的constructor属性引用了自身,当F作为构造函数创建对象时,原型上的constructor属性被遗传到了新创建的对象上,从原型链角度讲,构造函数F就是新对象的类型。这样做的意义是,让对象诞生以后,就具有可追溯的数据类型 ''.constructor == String //true

undefined和null的区别?

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

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

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

严格区别变量类型和数据类型?

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

数据的特点

  • 可传递
  • 可运算

内存中所有操作的目标:数据

  • 算术运算
  • 逻辑运算
  • 赋值
  • 运行函数

什么是内存?

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

什么是变量

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

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

  • 内存用来存储数据的空间
  • 变量是内存的标识

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

  • xxx是基本数据,保存的就是这个数据
  • xxx是对象,保存的是对象的地址值
  • xxx是一个变量,保存的xxx的内存内容(可能是基本数据,也可能是地址值)
var a = {age: 12}
var b = a
a = {name: 'Bob',age: 13}
b.age = 14
console.log(b.age,a.name,a.age) // 14 Bob 13
a = {name: 'Bob',age: 13}
function fn(obj) {
  obj = {age: 15}
}
fn(a)
console.log(a.age) //13
//因为刚开始a指向{age:13}的内存空间,在fn函数中,obj被赋值a,故它一开始也指向了{age:13}的内存空间,但后面又重新定义了obj, obj = {age: 15},此时obj不再指向{age:13},而是指向{age: 15}。现在obj和a指向的不是同一块内存空间

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

  • 都是值(基本/地址值)传递

js引擎如何管理内存?

  • 内存生命周期
    • 分配小内存空间,得到它的使用权
    • 存储数据,可以反复进行操作
    • 释放小内存空间
  • 释放内存
    • 局部变量:函数执行完自动释放
    • 对象:成为垃圾对象->垃圾回收器回收

什么是对象

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

为什么要用对象?

  • 统一管理多个数据

对象的组成

  • 属性:属性名(字符串)和属性值(任意)组成
  • 方法:一种特别的属性(属性值是函数)

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

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

什么是函数

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

为什么要用函数

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

如何调用(执行)函数

  • test():直接调用
  • obj.test():通过对象调用
  • new test():new调用
  • test.call/apply(obj):临时让test成为obj的方法进行调用

什么是回调函数

  • 自己定义的且没有调用但最终该函数执行了

常见的回调函数

  • dom事件回调函数
document.getElementById('btn').onclick = function() {
  ...
}
  • 定时器回调函数
  • ajax请求回调函数
  • 生命周期回调函数

this是什么?

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

如何确定this?

  • test(): window
  • p.test(): p
  • new test(): 新创建的对象(该构造函数创建出来的实例对象)
  • p.call(obj): obj

相关文章

网友评论

      本文标题:JavaScript数据类型

      本文链接:https://www.haomeiwen.com/subject/ddtaultx.html