小白快速了解-JavaScript中的数据内存对象函数


theme: smartblue

本篇文章主要内容是总结一下JavaScript中有关数据类型、数据在内存中的存储、对象和函数相关的一些基本但是又容易被忽视的一些知识。

一. 数据类型

  1. 严格来说,分为数据类型和变量类型
  • 数据类型:number、string、bool、undefind、null、object(对象)
  • 变量类型:number、string、bool、undefind、null、引用类型
  1. 什么是数据类型什么是变量类型?

    js 复制代码
    var a = 1
    var obj = { name: 'jack' }

    在上面代码中定义了两个变量, a变量的值为 1, obj 变量的值为 { name: 'jack' }。从这句话的描述中我们也能看到,我们把等号(=)左边的值称之为变量,右边的值成为值,也就是数据。基本类型都是直接保存值在变量中,但是对象不是,变量存储的是对象的引用地址,实际数据在堆区,后面会详细说明这些变量和数据在堆栈中的存储。

  2. 如何判断数据类型

  • typeof: 通过typeof无法判断null、object、array

    js 复制代码
    /**
    typeof 'str' === 'string'
    typeof 123 === 'number'
    typeof true === 'boolean'
    typeof undefind === 'undefind'
    typeof { name: 'jack' } === 'object'
    
    function fn () {}
    以下几个比较特殊:
    typeof null === 'object' // 所以一般 var obj = null, 提前赋值为null告诉别人obj后续会被赋值为对象,这只是一种规范的问题,不这么写也可以
    typeof [] === 'object' // 数组也是一种特殊的对象,可以理解为下标就是对象的key
    typeof fn === 'function'
    */
    console.log(typeof 'str' === 'string') // true, 通过typeof取到的都是类型对应的字符串表达
  • instanceof:可以用来判断null、object、array

    js 复制代码
    console.log(null instanceof Object) // false
    console.log({} instanceof Object) // true
    console.log({} instanceof Array) // false
    console.log([] instanceof Array) // true 数组基本Object类,所以[] instanceof Object === true
  • ===: 可以直接用来判断null、undefind, 需要注意,对象比较的时候比较的也是变量值(地址),而不是数据

js 复制代码
var obj1 = {}
var obj2 = {}
console.log(obj1 === obj2) // false

var a = null
var b
console.log(a === null, b === undefined) // true true

二. JS内存

这里的内存指的不是机械硬盘或者固态硬盘,而是保存运行中需要数据的一种存储介质。具有的特性是断电即失,只有在通电的状态下才能存储数据,容量远比用来存文件的固态要小,只加载程序运行过程中产生的一些数据。

  1. 首先我们弄清楚,执行一个JavaScript文件需要内存如何分配
  • 代码需要一块内存区域存储编译之后的字节码数据(这个编译过程肯定也是需要先加载源码进内存的)
  • 代码运行之后会产生变量和数据也需要内存区域(堆和栈)
  1. 下面重点说下堆栈区

    首先了解一下堆栈的概念:

    堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
    栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。特点是后进先出。

    记住这点:栈区存变量值,堆区存对象

    对于基本数据类型来说,变量值就是数据,但是对于一个引用类型,变量值只是数据的地址,我们通过点运算符(.)就可以理解为去查找这块地址所对应的数据。以下是个简单图解:

    js 复制代码
    var a = 123
    var b = 'this is string'
    var obj = { name: 'jack' }

三. 对象

  1. 现实事物在编程中的抽象
  2. 数据的集合体,封装属性和方法
  3. 方便统一管理多个数据
  4. 取值方法[对象名].属性名或者[对象名]['属性名'],后者更通用,比如带有特殊字符的属性名

四. 函数

  1. n条语句的封装
  2. 提高代码复用和方便阅读理解
  3. 可以通过函数声明或者创建变量以表达式形式。后者可以提升作用域。
  4. 调用方式:
    • test()
    • obj.test()
    • new test()
    • test.call(obj)/test.apply(obj)
  5. 回调函数:相当于函数编程了,一般是函数的入参为函数,内部调用外部函数,在某个时刻回调该函数。
  6. IIFE(Immediately Invoked Functions Expressions):立即执行函数,也叫匿名函数自调用,可以用来封装模块,隐藏内部实现,不污染命名空间。
  7. this: 要么是window,要么是所创建的对象。(通过call可以改变函数自己this指向)

以上内容总结了一下JavaScript的一些基础知识,是需要完全掌握的基本知识。后续会继续总结JavaScript的更多重要知识,提高对JavaScript的了解。在框架流行的时代,不忘初心~

相关推荐
海上彼尚1 分钟前
[逆向] 1.本地登录爆破
前端·安全
什么时候吃饭6 分钟前
vue2、vue3父子组件嵌套生命周期执行顺序
前端·vue.js
2501_940943917 分钟前
体系课\ Python Web全栈工程师
开发语言·前端·python
q***06478 分钟前
SpringSecurity相关jar包的介绍
android·前端·后端
低保和光头哪个先来14 分钟前
场景2:Vue Router 中 query 与 params 的区别
前端·javascript·vue.js·前端框架
q***952227 分钟前
SpringMVC 请求参数接收
前端·javascript·算法
|晴 天|29 分钟前
Vite 为何能取代 Webpack?新一代构建工具的崛起
前端·webpack·node.js
带只拖鞋去流浪33 分钟前
迎接2026,重新认识Webpack5
前端·webpack
HIT_Weston1 小时前
43、【Ubuntu】【Gitlab】拉出内网 Web 服务:静态&动态服务
前端·ubuntu·gitlab
LucidX1 小时前
Web——反向代理、负载均衡与 Tomcat 实战部署
前端·tomcat·负载均衡