Javascript 原始值与参考值
我读了一本名为“web开发者的专业Javascript”的书,书中说:“变量由引用值或原语值赋值。引用值是存储在内存中的对象。”。然后它就没有说明原语值是如何存储的。所以我猜它没有存储在内存中。基于此,当我有这样一个脚本时:Javascript 原始值与参考值,javascript,Javascript,我读了一本名为“web开发者的专业Javascript”的书,书中说:“变量由引用值或原语值赋值。引用值是存储在内存中的对象。”。然后它就没有说明原语值是如何存储的。所以我猜它没有存储在内存中。基于此,当我有这样一个脚本时: var foo = 123; JSGenericObject ten = new JSNumber(10); // var ten = 10; Javascript如何记住foo变量以备日后使用?一个变量可以包含两种值类型之一:基本值或参考值 基本值是存储在堆栈上的数
var foo = 123;
JSGenericObject ten = new JSNumber(10); // var ten = 10;
Javascript如何记住
foo
变量以备日后使用?一个变量可以包含两种值类型之一:基本值
或参考值
基本值
是存储在堆栈上的数据
原语值
直接存储在变量访问的位置
参考值
是存储在堆中的对象
- 存储在变量位置的参考值是指向存储对象的内存位置的指针
- 基本类型包括
未定义
,空
,布尔
,数字
,或字符串
基础知识:
对象是属性的聚合。属性可以引用对象
或原语
<代码>原语是值
,它们没有属性
更新:
JavaScript有6种基本数据类型:字符串,数字,布尔,空,未定义,符号(ES6中新增)。除了null和undefined之外,所有原语值都具有环绕原语值的对象等价物,例如字符串对象环绕字符串原语。所有原语都是不可变的。在javascript中,
原语值是存储在堆栈上的数据
原语值
直接存储在变量访问的位置
而参考值
是存储在堆中的对象
存储在变量位置中的参考值是指向存储对象的内存位置的指针
JavaScript支持五种基本数据类型:number、string、Boolean、undefined和null
这些类型被称为基元类型,因为它们是基本的构建块,可以从中构建更复杂的类型
在这五种类型中,只有number、string和Boolean
是实际存储数据的真正数据类型
未定义和null
是在特殊情况下出现的类型。基元类型
在内存中具有固定大小。
例如,一个数字占用八个字节的内存,布尔值只能用一位表示
引用类型可以是任意长度的——它们没有固定的大小。好的,把变量想象成一张纸——一张便笺
注1:变量是便签
现在,一张便签非常小。你只能在上面写一点点信息。如果你想写更多的信息,你需要更多的便签,但这不是问题。想象一下,你有无数的便笺
注2:你有无数的便笺,用来储存少量信息
太好了,你能在便条上写些什么?我可以写:
是或否(布尔值)
我的年龄(一个数字)
我的名字(字符串)
完全没有(未定义)
涂鸦或任何对我来说毫无意义的东西(null)
所以我们可以在便笺上写一些简单的东西(让我们屈尊称之为原始的东西)
注3:你可以在便签上写一些原始的东西
比如说,我在便条上写了30
,提醒自己为今晚在我家举办的小派对买30片奶酪(我的朋友很少)
当我去把我的便条贴在冰箱上时,我看到我妻子在冰箱上又贴了一张便条,上面写着30
(提醒我她的生日是本月30日)
Q:这两张便笺是否传达了相同的信息
A:是的,他们都说30
。我们不知道是30片奶酪还是一个月的第30天,坦率地说,我们不在乎。对于一个不知道更多的人来说,一切都一样
var slicesOfCheese = 30;
var wifesBirthdate = 30;
alert(slicesOfCheese === wifesBirthdate); // true
注4:两张写有相同内容的便笺传达相同的信息,即使它们是两张不同的便笺
今晚我真的很兴奋——和老朋友一起玩,玩得很开心。然后我的一些朋友打电话给我,说他们不能参加聚会了
所以我去冰箱把我的便条上的30
擦掉(不是我妻子的便条,那会让她很生气),然后把它变成20
注5:您可以删除便笺上写的内容,然后再写其他内容
问:这很好,但是如果我妻子想让我写一份杂货清单,让我在出去买奶酪的时候去拿,那该怎么办呢。她需要为每一项都写一张便条吗
A:不,她会拿一张长长的纸,然后把食品清单写在那张纸上。然后她会写一张便条,告诉我在哪里可以找到杂货清单
那么这里发生了什么
杂货清单显然不是简单的(呃…原始的)数据
我妻子把它写在一张较长的纸上
var groceryList1 = ["1 dozen apples", "2 loaves of bread", "3 bottles of milk"];
var groceryList2 = groceryList1;
alert(groceryList1 === groceryList2); // true
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
int c = a + b;
printf("%d", c);
return 0;
}
#include <stdio.h>
#include <malloc.h>
int main() {
int * a = malloc(3 * sizeof(int));
a[0] = 3;
a[1] = 5;
a[2] = 7;
printf("a: %d\nb: %d\nc: %d\n", a[0], a[1], a[2]);
return 0;
}
JSGenericObject ten = new JSNumber(10); // var ten = 10;
var a = 3.14; // Declare and initialize a variable
var b = a; // Copy the variable's value to a new variable
a = 4; // Modify the value of the original variable
alert(b) // Displays 3.14; the copy has not changed
var a = [1,2,3]; // Initialize a variable to refer to an array
var b = a; // Copy that reference into a new variable
a[0] = 99; // Modify the array using the original reference
alert(b); // Display the changed array [99,2,3] using the new reference