手机版

向我学习javascript的基本类型和引用类型

时间:2021-09-22 来源:互联网 编辑:宝哥软件园 浏览:

一、基本类型和参考类型。

有五种基本数据类型:未定义、布尔、数字、字符串和null。

类型为null//“object”类型未定义;//“undefined”类型为1;//' number ' typeof false//' boolean ' type of ' 1 '/' string '(令人费解的是,对null类型进行type of运算的结果是“object”,然而,ECMAScript标准将其描述为唯一类型。)

为了方便对基本类型值的操作,ECMAScript还提供了三种特殊的引用类型:布尔值、数字和字符串,标准库提供了将布尔值、数字和字符串封装为对象的构造函数。这些类型与其他引用类型相似,也有与其基本封装类型相对应的特殊行为。事实上,每当读取一个基本类型值时,后台都会创建一个基本包装类型的对应对象,这样我们就可以调用一些方法来操作数据。

var s1='某些文本';var S2=S1 . substring(2);var s3=新字符串('某些文本');但是与原始字符串不同,字符串对象是一个真实的对象。

s1的类型;//“string”类型的S3;//“对象”本例中的变量s1包含一个字符串,当然这是一个基本的类型值。下一行调用s1的substring()方法,并将返回的结果保存在s2中。我们知道,基本类型值不是对象,所以从逻辑上讲,它们不应该有方法(但它们确实有方法)。其实为了让我们实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于读取模式,即从内存中读取该字符串的值。在读取模式下访问字符串时,后台会自动完成以下处理:

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

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

(3)销毁此实例。

它可以由以下代码表示:

var s1=新字符串('某些文本');var S2=S1 . substring(2);s1=null在此处理之后,基本字符串值变得与对象相同。此外,上述三个步骤也适用于对应于布尔和数字类型的布尔值和数值。

二、生命周期

引用类型和基本封装类型的主要区别是对象的生命周期。使用新运算符创建的引用类型的实例将保留在内存中,直到执行流离开当前范围。但是,自动创建的基本打包类型的对象只存在于这一行代码的执行期间(瞬间),然后立即被销毁。这意味着我们不能在运行时向属性添加属性和方法。

var s1='某些文本';s1.color=' redalert(S1 . color);//undefined当然,您可以显示调用Boolean、Number和String来创建基本包装类型的对象,但不建议这样做。在基本包装类型的实例上调用typeof将返回“object”,并且基本包装类型的所有对象都将转换为布尔值true。

var obj=新对象(“一些文本”);Alert(字符串的objinsity)//true值得注意的是,使用new调用基本包装类型的构造函数不同于直接调用同名的转换函数。

var值=' 25 ';var number=Number(值);//转换函数alert(数字类型)//number varobj=new number(var);//构造函数警报(object的类型)//对象iii。基本类型的特征。

1.基本类型的值是不可变的:

没有任何方法可以更改基本类型(如字符串)的值:

var name=' jozoname . touppercase();//输出' JOZO'console.log(名称);//当您输出‘jozo’时,您会发现原来的名称没有改变,但是在调用toUpperCase()方法后返回了一个新的字符串。让我们看另一个:

var person=' jozoperson.age=22person.method=function(){//.};console . log(person . age);//undefinedconsole . log(person . method);//undefined从上面的代码中我们可以看到,我们不能在基本类型中添加属性和方法,在再次解释基本类型时是不可更改的。

2.基本类型的比较是值的比较:

只有当他们的价值观相同时,他们才是平等的。但你可能是这样的:

var a=1;var b=真;console . log(a==b);//真的他们不平等吗?其实这就是类型转换和==运算符的知识,也就是说,当两个不同类型的变量与==进行比较时,就会进行一些类型转换。像上面这样的比较首先将true转换为数字1,然后将其与数字1进行比较,结果将是true。这是因为当两个值的类型不同时==运算符会执行类型转换,但是当两个值的类型相同时,即使==也相当于====。

var a=' jozovar b=' jozoconsole . log(a===b);//true3。基本类型的变量存储在堆栈区(堆栈区指内存中的堆栈内存)。

假设有几种基本类型的变量:

var name=' jozovar city='广州';var年龄=22岁;那么它的存储结构如下:

堆栈区域包括变量的标识符和值。

四.引文类型的特点。

参考类型会很有趣。

除了上述基本类型(数字、字符串、布尔值、null、undefined)之外,javascript还是一种引用类型或对象。是属性和方法的集合。也就是说,引用类型可以有属性和方法,属性可以包含基本类型和引用类型。让我们来看看引用类型的一些特征:

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

我们可以为引用类型添加属性和方法,或者删除它们的属性和方法,例如:

var person={ };//创建控件对象-引用类型person.name=' jozoperson.age=22person . SayName=function(){ console . log(person . name);} person . SayName();//' jozo ' delete person . name;//删除person对象的name属性person . say name();//undefined上面的代码显示了引用类型可以有属性和方法,并且可以动态更改。

2).引用类型的值是存储在堆栈内存和堆内存中的对象。

与其他语言不同,javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间,那么我们该怎么办呢?实际上,它是操作数的引用,所以引用类型的值是通过引用来访问的。

准确地说,引用类型的存储需要内存的栈区和堆区(堆区指内存中的堆内存),栈区内存将变量标识符和指向对象的指针存储在堆内存中,也可以说是对象在堆内存中的地址。假设有以下对象:

var person 1={ name : ' jozo ' };var person 2={ name : ' xiaom ' };var person 3={ name : ' xiaoq ' };那么这三个对象在内存中的存储如下:

3)引用类型的比较就是引用的比较。

var person1=' { }var person2=' { }console . log(person 1==person 2);//true在谈到基本类型的比较时,提到当两个比较值的类型相同时,相当于使用===,所以输出为true。再看看:

var person 1={ };var person 2={ };console . log(person 1==person 2);//假也许你已经看到了破绽。上面的比较是两个字符串,而下面的比较是两个对象。为什么相同的物体不相等?

记住,当引用一个类型时,它是通过引用来访问的。换句话说,就是比较两个对象的堆内存中的地址是否相同。显然,堆内存中person1和person2的地址是不同的:

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

5.简单的任务。

将基本类型从一个变量分配给另一个变量时,会在该变量上创建一个新值,然后将该值复制到为新变量分配的位置:

var a=10var b=a;a;console . log(a);//11 con sole . log(b);//10此时,A中存储的值为10。当用A初始化B时,存储在B中的值也是10。但是,B中的10与A中的10是完全独立的,这个值只是A中值的一个副本,之后这两个变量可以参与任何操作,互不影响。

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

不及物动词对象引用

当将引用类型的值从一个变量赋给另一个变量时,存储在该变量中的对象值的副本也将放在为新变量分配的空间中。当谈到引用类型时,我提到变量中存储的是堆内存中对象的地址。因此,与简单赋值不同,这个值的副本实际上是一个指针,这个指针指向存储在堆内存中的一个对象。然后,在赋值操作之后,两个变量持有相同的对象地址,因此两个变量指向相同的对象。因此,改变任何一个变量都会相互影响:

var a={ };//a保存了一个空对象var b=a的实例;//a和b都指向这个空对象a.name=' jozoconsole . log(a . name);//' jozo ' console . log(b . name);//' jozo ' b . age=22;console . log(b . age);//22 con sole . log(a . age);//22 con sole . log(a==b);//真他们的关系如下:

所以引用类型的赋值实际上是对象在栈区保存的地址指针的赋值,所以两个变量指向同一个对象,任何操作都会相互影响。

以上就是本文的全部内容,希望对大家的学习有所帮助。

版权声明:向我学习javascript的基本类型和引用类型是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。