请跟随我使用Javascript的基本类型和参考类型。

请跟随我使用Javascript的基本类型和参考类型。
1。基本类型和引用类型

有5种基本的数据类型:未定义的、布尔的、数字的、字符串的、null的。
类空; / /对象
类定义; / / 的定义
类型1; / /
假 / /布尔类型
类型1 / / 字符串
(这是混淆结果的类型为null类型对象的操作,然而,ECMAscript标准描述了它作为一种独特的类型。)

为了便于操作的基本类型的值,ECMAscript还提供了三特殊引用类型:布尔值、数字和字符串。标准库提供了构造函数将布尔值、数字和字符串的对象。这些类型相似的其他引用类型,他们也有特殊的行为对应的基本包装类型。事实上,每当一个基本类型值的读取,背景创建相应的基本包装类型的一个对象,以便我们可以把一些方法来操纵这些数据。
一些文本
VaR S2 = s1.substring(2);
var =新字符串(一些文本);
但与原始字符串不同,String对象是一个真正的对象。
类型的S1; / /字符串
类型的S3; / /对象
变量S1在这个例子中包含一个字符串,而字符串是课程的基本类型的值。下一行调用的子串()方法返回的结果在S1和S2了。我们知道,基本类型的值不是对象,所以他们不应该有一个合乎逻辑的方法(但也有方法)。事实上,为了让我们实现这个直观的操作,后台已自动完成一系列的处理。当第二行代码访问S1,访问过程中,是一种阅读模式,阅读,从内存的字符串的值。当一个字符串是一个阅读模式访问,后台会自动完成以下处理:

(1)创建字符串类型的实例。

(2)在实例上调用指定的方法。

(3)摧毁这个例子。

下面的代码可以表达如下:
var =新字符串(一些文本);
VaR S2 = s1.substring(2);
S1 = null;

在此过程之后,基本字符串值与对象相同,而且上述三个步骤也适用于布尔值和数字类型对应的布尔值和数字值。

二、生命周期

引用类型和基本包装类型之间的主要区别是对象的生命周期。使用new运算符创建的引用类型的一个实例是保存在内存中的流的执行离开当前范围之前,基本的封装类型,自动创建的只存在于这行代码执行期间的对象(即时),然后立即销毁。这意味着我们不能在运行属性中添加属性和方法。
一些文本;
s1.color =红色;
警报(S1颜色);
当然,你可以显示一个对象调用布尔,号码,和字符串创建基本的包装类型,但它并不能帮助这样做。调用的基本包装类型类型返回对象的一个实例,和基本包装类型的对象转换为布尔值true。
var obj =新的对象(文本);
警报(obj是字符串) / /真的
值得注意的是,使用新调用基本包装器类型的构造函数不同于直接调用同一名称的转换函数。
var值 25 ;
var数字=数字(值);转换函数
警报(型号) / /数量

var obj =新号码(VAR); / /构造函数
警报(typeof obj) / /对象
三。基本型的特点

1。基本类型的值不改变:

没有方法可以更改基本类型(如字符串)的值:
变量名= 'jozo;
Name.toUpperCase('jozo '); / /输出
console.log(名称); / / 'jozo'output
你会发现原来的名字没有改变,而是叫toUpperCase()返回一个新字符串的方法。

再看一遍。
无功的人= 'jozo;
person.age = 22;
person.method =(功能){ / / } ..;

console.log(人的年龄); / /未定义
console.log(人法); / /未定义

通过上面的代码,我们不能向基本类型添加属性和方法,并且再次显示基本类型是不可变的;

2者之比较。基本类型是价值的比较:

只有当它们的价值相等时,它们才是平等的。

但你可能:
var a=1;
var =真的;
console.log(a = b); / /真的

它们不是相等的吗事实上,这是转换和运算符= =知识型,也就是说在= =来比较两种不同类型变量的一些类型转换。相比以上比较,真的是第一次转换为一个数字1,然后与1号相比,其结果是真的,这当两值对不同类型转换运算符= =比较的类型,但当两值相同的类型,即使是相当于= = = = =。
创建一个'jozo;
var b = 'jozo;
console.log(a b); / /真的

三.基本类型的变量存储在堆栈区域(内存中的堆栈内存)

如果有几个基本类型的变量:
变量名= 'jozo;
VaR的城市'guangzhou;
var年龄= 22;

然后它的存储结构如下所示:
堆栈区域包含变量的标识符和变量的值。

四。参考类型的特征

参考的类型将是有趣和有趣的。

除了以上的基本类型(数字、字符串、布尔值、空值、不确定),Javascript是引用类型,或是对象,对象是一个集合的属性和方法。也就是说,引用类型可以有属性和方法,和属性可以包含基本类型与引用类型。看看的引用类型的特点:

1)。引用类型的值是可变的。

我们还可以将属性和方法添加到引用类型中,也可以删除它们的属性和方法,例如:
var = {;};创建一个控件对象引用类型
person.name = 'jozo;
person.age = 22;
person.sayname =函数(){ console.log(人的名字);}
(人。sayname); / / 'jozo

删除person.name; / /删除对象的名称属性的人
(人。sayname); / /未定义

上面的代码显示引用类型可以有属性和方法,并且可以动态地更改。

2)。引用类型的值是存储在堆栈内存中的对象,同时存储在堆内存中。

与其他语言不同,Javascript不允许直接访问内存中的位置,也就是说,它不能直接操作对象的内存空间。我们该怎么办事实上,它是操作对象的引用,因此引用类型的值是通过引用访问的。

确切地说,引用类型的存储需要内存堆栈区域和堆区域(堆区域指内存中的堆内存)来完成,堆栈区域内存将变量标识符和指针保存到堆内存中的对象,也可以称为堆内存中对象的地址

如果有以下对象:
VaR甲= {姓名:'jozo};
var 2 = {姓名:'xiaom};
无功person3 = {姓名:'xiaoq};

然后将三个对象保存在内存中,如下所示:

3)。参考类型比较是参考文献的比较。
甲={ }功;
2 ={ }功;
console.log(甲= = 2); / /真的

当比较上述基本类型时提到的两个比较相同类型的值,相当于用= = =,所以输出是真的。我想看到别人uff1a
VaR甲= { };
var 2 = { };
console.log(甲= = 2); / /假

也许你已经看到了这个缺陷。比较了上面的两个字符串,并比较了以下两个对象。为什么长相同的物体不相等

当您引用引用时,不要忘记引用该类型。换句话说,它比较两个对象堆内存中的地址。很明显,甲和2地址不同的堆内存。

所以这两个是完全不同的对象,所以返回false;

五,简单赋值

当将一个基本类型从一个变量分配给另一个变量时,它将在该变量上创建一个新值,并将其复制到分配给新变量的位置。
var a=10;
var;

++;
console.log(一); / / 11
console.log(B); / / 10

此时,A持有一个值为10,当使用A来初始化B时,存储在B的值是10,而B和A中的10是完全独立的,这个值只是以后A值的一个拷贝,这两个变量可以参与任何操作,彼此不受影响

也就是说,在基本类型的赋值之后,这两个变量并不相互影响。

六。对象的引用

当将引用类型的值从一个变量赋值给另一个变量时,它也将存储在变量中的对象的值复制到分配给新变量的空间中。因此,与简单赋值不同,该值的拷贝实际上是一个指针,这个指针指向存储在堆内存中的对象。赋值后,两个变量都保存相同的对象地址,两个变量指向同一个对象:
var;;a持有空对象实例
var a =;a和b指向空对象。

a.name = 'jozo;
console.log(a.name); / / 'jozo
console.log(b.name); / / 'jozo

b.age = 22;
console.log(b.age); / / 22
console.log(a.年龄); / / 22

console.log(a = b); / /真的

他们的关系如下:

因此,引用类型的赋值实际上是存储在堆栈区域中的对象地址指针的赋值,因此两个变量指向同一个对象,任何操作都将相互作用

以上是本文的全部内容,希望能对大家有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部