手机版

JavaScript学习总结(一)—— JavaScript入门

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

1.JavaScript语言特性

1.1.JavaScript是基于对象和事件驱动的(动态的)

它可以直接响应用户或客户的输入,而无需通过网络服务程序。它以事件驱动的方式响应用户。所谓事件驱动,是指在首页执行某个操作而产生的动作,称为“事件”。例如,按下鼠标、移动窗口和选择菜单都可以被视为事件。当事件发生时,可能会引起相应的事件响应。

1.2.JavaScript是跨平台的

JavaScript依赖于浏览器本身,与操作系统无关。

第二,JavaScript变量

2.1.定义变量

定义变量时,统一使用“var变量名”,例如:var str您甚至可以省略关键字var

2.2.如何确定JavaScript变量的类型

JavaScript中变量的数据类型由JS引擎决定

Var name='寂寞沧浪';//名称属于字符串类型var age=;//age为数字类型var标志=true//标志为布尔值类型var email//email只是一个没有赋值的声明,所以表示的类型是‘未定义’,即name=无法确定;//名称自动更改为数字类型2.3。使用typeof关键字查看变量表示的特定数据类型

运算符的类型有一个参数,即要检查的变量或值。例如:

var sTemp='测试字符串';警报(sTemp类型);//输出“string”警报(type of);//对变量或值调用typeof运算符的输出“number”将返回以下值之一:

未定义-如果变量的类型未定义

布尔型-如果变量是布尔型的,

数字-如果变量是数字类型

字符串-如果变量是字符串类型,

对象-如果变量是引用类型或空类型

测试代码:

脚本类型=' text/JavaScript' var name='孤傲沧浪';//name为字符串类型警报(' name为' type of name ' type ');var age=;//age是数字类型警报(' age是' age类型');var标志=真;//标志是布尔类型的警报(标志的类型是:“标志的类型”);名称=;//name自动变为数字类型alert(在‘name变量被重新分配后,name的数据类型变为:‘name的类型’);var电子邮件;//email只是一个声明,没有赋值,所以表示的类型是‘未定义’,也就是alert无法确定(email的类型是:‘email的类型’);var a=null/*为什么运算符的类型为空值返回“对象”?这实际上是JavaScript最初实现中的一个错误,后来被ECMAScript采用。现在,null被视为对象的占位符,这解释了这个矛盾,但从技术上来说,它仍然是原始值。*/alert('a是' type '的' type ');/脚本运行结果:

第三,JavaScript数据类型

JavaScript包含两种不同的数据类型:基本数据类型和引用数据类型。基本类型是指简单数据,引用类型是指由多个值组成的对象。当我们给变量赋值时,解析器应该做的第一件事是确认该值是基本类型值还是引用类型值。

3.1.基本数据类型

五种常见的基本数据类型:

booleanumberstringundifinednull

这五种基本数据类型可以直接操作变量中存储的实际值。

3.1.1.数字类型(数字)和布尔类型(布尔)

请看下面的代码:

脚本类型=' text/JavaScript ' var a=;var b=a;b=;alert(' a=' a ');//print a=var b=true;var b=bb=假;alert(' b=' b ');//print b=true/脚本运行结果:

从运行结果可以看出,B的值是a的值的副本,虽然两个变量的值相等,但两个变量持有两个不同的基本数据类型值。b只是保留了一份A的副本。因此,当b的值变为20时,a的值仍然是10。两个布尔变量b1和b2也是基本数据类型,它们也保存两个不同的基本数据类型值,b2保存1个副本的一个副本。因此,当b2的值变为false时,b1的值保持为true。

下图说明了这种基本数据类型的分配过程:

栈存储器

3.1.2.字符串类型(字符串)

JavaScript中的字符串是一种特殊的基本数据类型。在很多语言中,String都是以对象的形式来表达的,但是在JavaScript中,String被看作是一种基本的数据类型,是以通用值传递的方式来操作的。但它是一种特殊的基本类型。

请看下面的例子:

脚本类型=' text/JavaScript' varstra='这是一个字符串';var strB=strAStrA='这是另一个字符串';alert(' Strb=' Strb ');/脚本运行结果:

从运行结果来看,似乎strA通过价值转移复制了一个副本到strB。当strA改变时,strB没有改变。似乎我们已经可以断定字符串是一种基本的数据类型。

但是由于String可以是任意长度,一个一个复制字节的显示效率还是很低的,所以似乎String也可以作为引用类型。

请看下面的例子:

var a=' myobjecta.name=' myname//将name属性alert('a.name=' a.name ')动态添加到字符串a;//访问的name属性,

结果显示:a.name=undefined

运行结果:

运行结果显示,字符串不能被视为对象。这也证明了一点:基本类型虽然可以添加属性,但是不会报错,但是经过测试添加之后就无法访问了。事实上,javascript中的string是无法更改的,javascript也没有提供任何方法和语法来更改String。

请看下面的例子:

var b=' myobjectb=b.substring(,alert(' b=' b ');//b=bj运行结果:

这样,字符串“myobject”不会改变,只有b引用另一个字符串“bj”,并且“myobject”被回收。

因此,可以说String实际上并不符合上述两种数据类型的分类。它是一种特殊类型,中间有两个属性。

3.1.3.空类型

null类型只有一个特殊的值null,未定义的值实际上是从Null值派生的,所以ECMAScript将它们定义为相等。

脚本类型=' text/JavaScript '警报(结果为' null==undefined ':(null==undefined));//输出‘true’/脚本运行结果:

虽然这两个值是相等的,但它们有不同的含义。Undefined是在变量声明但未初始化时赋予变量的值,null用于表示尚不存在的对象(对于null值,typeof运算符返回“Object”。)。如果函数或方法要返回一个对象,当找不到该对象时,它通常返回null。

3.1.4.未定义的类型

未定义类型只有一个值,即未定义。当声明的变量未初始化时,变量的默认值是未定义的。

var oTemp

前一行代码声明变量oTemp没有初始值。变量将被赋予undefined值,这是undefined类型的文字。您可以使用以下代码片段来测试此变量的值是否等于undefined:

脚本类型=' text/JavaScript ' var oTemp;alert(OteMP==undefined的结果是:“(o temp==undefined));//输出‘true’/脚本运行结果:

运行结果显示“真”,这意味着这两个值真的相等。

您可以使用typeof运算符来表示此变量表示的数据类型未定义

脚本类型=' text/JavaScript ' var oTemp;警报(类型为“o”的结果是:“类型为“o”的温度);//输出‘未定义’/脚本

未定义的值与未定义的值不同。然而,运算符的类型并不能真正区分这两个值。考虑以下代码:

脚本类型=' text/JavaScript ' var oTemp;Alert('声明了oTemp变量,oTemp的类型结果为:' oTemp的类型');//输出“undefined”alert(' oTemp变量未声明,且oTemp的type的结果为:' type of oTemp ');//输出“未定义”脚本的运行结果:

两个变量都输出“未定义”,尽管只有变量oTemp2从未声明过。如果您对oTemp2使用typeof以外的运算符,将会得到一个错误,因为其他运算符只能用于声明的变量。

以下代码引发了一个错误:

var oTempalert(oTemp==未定义);//“OteMP”未定义。当函数没有显式返回值时,它也返回“undefined”值,如下所示:

函数testFunc() {//这是一个没有返回值的空函数} alert(' TestFunc()==undefined的结果是:“(TestFunc()==undefined));//输出“真”运行结果:

3.2.参考数据类型

javascript引用数据类型是存储在堆内存中的对象。JavaScript不允许直接访问堆内存空间中的位置和堆内存空间的操作,而只允许通过堆栈内存中操作对象的引用地址。因此,存储在堆栈内存中的引用类型数据实际上是堆内存中对象的引用地址。有了这个引用地址,您可以快速找到存储在堆内存中的对象。

请看下面的例子:

脚本类型=' text/JavaScript ' var obj=new Object();var obj=objObj.name=《寂寞沧浪》;alert(obj . name);//孤傲沧浪/脚本运行结果:

从上面的例子中,我们声明了一个引用数据类型变量obj1,并将其分配给另一个引用数据类型变量obj2。当我们向obj2添加一个名称属性并赋予一个值“孤傲沧浪”时。Obj1也具有与obj2相同的名称属性。解释这两个引用数据类型变量指向同一个对象。分配给obj2的Obj1,实际上只把这个对象在堆栈内存中的引用地址复制到obj2,但是它们本质上指向堆内存中的同一个对象。

让我们演示这个引用数据类型的赋值过程

自然,将name属性添加到obj2实际上是将name属性添加到堆内存中的对象。obj2和obj1只存储堆栈内存中堆内存对象的引用地址,虽然它们也被复制,但它们指向同一个对象。因此,改变obj2会导致obj1改变。

一般来说,基本数据类型由固定数量的字节组成,可以在解析器的下层进行操作,比如Number和Boolean;引用数据类型可以包含任意数量的属性和元素,因此它们不能像基本数据类型那样容易操作。

因为引用数据类型的值会发生变化,所以像基本数据类型一样传递值是没有意义的,因为会涉及大量的内存复制和比较,效率太低。因此,引用数据类型是通过引用传递的,实际上只传递了对象的一个地址。

例如,数组和函数都是引用类型,因为它们是特殊的对象。此外,引用类型可以添加属性。虽然基本类型也可以在不报告错误的情况下添加属性,但在测试和添加后无法访问。

版权声明:JavaScript学习总结(一)—— JavaScript入门是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。