《每天十分钟》-红宝书第4版-变量、作用域与内存

最近有点忙,好长时间没抄经了,今天继续,之前语言基础相对简单,跳过一部分操作符。

变量

js 的变量是特殊的松散类型,由于没有规则定义变量必须包含什么数据类型,变量的值和数据类型在脚本生命期内可以改变。

原始值和引用值。

原始值(primitive value)就是最简单的数据。

引用值(reference value)则是由多个值构成的对象。

之前学过的6 种原始值:Undefined、Null、Boolean、Number、String 和 Symbol。保存原始值的变量是按值(by value)访问的,因为我们操作的就是存储在变量中的实际值。

引用值是保存在内存中的对象。与其他语言不同,JavaScript 不允许直接访问内存位置,因此也就不能直接操作对象所在的内存空间。在操作对象时,实际上操作的是对该对象的引用(reference)而非实际的对象本身。为此,保存引用值的变量是按引用(by reference)访问的。

注意 在很多语言中,字符串是使用对象表示的,因此被认为是引用类型。ECMAScript

打破了这个惯例。

动态属性

原始值使用字面量初始化的,则不能动态添加属性的

javascript 复制代码
var t = "zhangsan"
t.age = 18
console.log(t.age) //undefined

但如果是使用new 关键字创建的Object类型的实例 则可以添加动态属性,因为已经是Object

javascript 复制代码
var abc = new String('zhangsan')
abc.age = 18
console.log(abc.age) // 18

复制值

一个原始值赋值到另一个原始值时,两个变量的内存存储时完全独立的,这个很好理解,因为上面讲了,原始值就是内存直接存储的值

javascript 复制代码
var a = 1;
var b = a
a = 3
console.log(b) //1

而引用类型再赋值过程中实际只是复制了内存的指针

javascript 复制代码
var a = {"name":"zhangsan"}
var b = a
a.name = "lisi"
console.log(b) //{name: 'lisi'}

传递参数

和内存复制一样,原始值完全独立,引用类型指向同一块内存,修改后指向引用的变量都会变化

确定类型

typeof 操作符最适合用来判断一个变量是否为原始类,之前再语言基础中由示例,此处不再重复。

ypeof 虽然对原始值很有用,但它对引用值的用处不大。我们通常不关心一个值是不是对象,

而是想知道它是什么类型的对象。为了解决这个问题,ECMAScript 提供了 instanceof 操作符,语

法如下:

javascript 复制代码
var a = {name:'zhangsan'}
a instanceof Object //true
var b = "123"
b instanceof Object //false

按照定义,所有引用值都是 Object 的实例,因此通过 instanceof 操作符检测任何引用值和

Object 构造函数都会返回 true。类似地,如果用 instanceof 检测原始值,则始终会返回 false,

因为原始值不是对象。

下篇继续抄 较为重要的 执行上下文

今天我家二娃也一年级了,找了篇关于放学开心的诗读读,😊

《村居》

清代·高鼎

草长莺飞二月天,

拂堤杨柳醉春烟。

儿童散学归来早,

忙趁东风放纸鸢。

相关推荐
子兮曰7 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭7 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路10 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒11 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol12 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉12 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau12 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生12 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼12 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君8799712 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter