学习程序语言只不过是两个方面:一个是语法,二个是数据类型,C类语言的语法无非是函数,算术运算等等,而面向对象的语言则被添加到对象中。

语法是语言的设计者制定一套规则,不同语言的语法是不一样的,但有一些共同点,一个或两个人们熟悉的编程语言,学习其他编程语言,语法往往是没有问题的(当然,如果你已经学习了语文课是C,那么第一接触LISP也必须花一些时间),学习的重点是数据类型和相关操作,不是有句老话:数据结构+程序=算法!其次,有些语言在自己的语法(javascript)中有设计问题。我们不必深入研究这些问题。当然,如果你管自己叫极客,你可以和他们玩。

本文将对Javascript中的数据类型进行详细的描述。

弱类型与强类型

考虑到Javascript的设计理念,Javascript被设计成一种弱语言。

在这种情况下,弱类型和强类型之间的区别是不可避免的。

有些人认为这两者之间的区别是,一个强类型语言需要指定其类型在声明变量,而弱类型不使用它。事实上,这种观点是错误的。例如,下面的java代码段:

复制代码代码如下所示:

字符串;

int l = s.getbytes(长度);



编译器是如何知道的长度是一个合法表达式吗这是因为编译器知道s的数据类型是字符串。调用字符串GetBytes方法时,返回值的数据类型是字节{ },所以长度是一个合法的表达式。

两者之间的真正区别是:

在强类型语言中,可以在编译时确定每个表达式的类型,只允许该类型的操作。

弱类型的语言允许任何操作应用于任何类型,但也有可能此操作可能错误地运行时间。

数据类型

根据ECMAscript 5.1标准,有六种类型的Javascript数据类型:定义、空、布尔值、数字,字符串对象。第一五属于基本型,而最后一个属于对象类型。

基本数据类型

未定义的类型只有一个值,未定义,这意味着空值(无值),适合所有数据类型。

null类型只有一个值,null,这意味着空对象(没有对象),它只适用于对象类型。

布尔类型有两个值,即真和假。

的数字类型的值是一个64位的浮点数,遵循IEEE 754标准,类似于java双。没有整数数据结构。它还包含三个特殊值:南,无穷大,无穷

字符串类型的值是一组较差的Unicode字符。您必须使用或。

空的和不确定的

如果严格区分,null和未定义都表示无价值(非价值)的概念:

- NULL表示空

-明确指示不存在,未初始化的变量,函数中的参数丢失,并没有明确的返回值的函数都是这种价值

在其他语言中,只使用一个null表示空值。为什么Javascript中有超过一个未定义的内容这是历史原因的原因:

Javascript采用java语法,分类型分为基本类型和对象类型,并用空在java表示空对象。javascript认为它是理所当然的。在C语言中,null是0,当它被转换成数字时,Javascript也采用同样的方式。

复制代码代码如下所示:

>数字(空)

零

> > 5 +空

五



在javascript1.0,没有异常处理(异常处理),对于一些例外(缺少参数初始化的变量,函数调用,等)需要被标记作为一种特殊的价值,零是一个很好的选择,但布兰登·艾奇也要避免以下两点:

-这个特定的值不应该具有引用的特性,因为它是特定于对象的。

-这个特殊值不应该变成0,因为在程序中不容易发现错误。

因为这两个原因,布兰登·艾奇选择不明确,可以强转为南。

复制代码代码如下所示:

>编号(未定义)

南

> > 5 +未定义

南



二是当JSON对象相互作用时,结果是完全不同的:

复制代码代码如下所示:

> > JSON.parse(空)

无效的

> > JSON.parse(不确定)

/ / Firfox syntaxerror: JSON.parse:在JSON数据的1列1行意外的字符

/ /铬syntaxerror:意外的标记U

> > JSON.stringify(空)

null

> > JSON.stringify(不确定)

未定义



对象类型

作为一种脚本语言,Javascript有一个非常简单的功能,许多功能(文件的读、写、网络等)是由宿主环境提供的。宿主环境和Javascript语言的桥梁为对象,与宿主环境提供的各种功能提供了一系列符合Javascript语法对象。

在面向对象编程本文Javascript(如果你不知道什么是原型的强烈建议看看这篇文章),我一再强调,在Javascript中的对象是一系列的键-值对,喜欢java的HashMap,但是在Javascript中的对象的属性可以有一些描述符(属性描述符)这是不是在HashMap。

属性描述符

属性描述符分为两类:

数据描述符(数据描述符),它包含一系列布尔值来显示是否允许修改和删除属性。

访问说明符(访问描述符),其中包含获得和设置功能。

这两个描述符都是对象,它们都有以下两个布尔属性:

可配置用于指定描述符是否被修改和删除。默认为false。

枚举用于指定是否将属性访问时,一个属性进行遍历,使用对…在环或object.keys方法。默认为false。

除了上述两个公共属性之外,数据描述符还具有以下两个属性:

值用于指定此属性的值,默认值是未定义的。

可写用于指定此属性的值是否允许更改属性的值,默认值为false。

访问描述符还具有以下两个属性:

获取用于指定一个访问器(实质上是一个函数的吸气剂,)当属性被访问和访问器返回该属性的值是未定义的默认。

设置用于指定分包人(实质上是一个函数的二传手,)当属性被访问,与出让人接受一个参数默认是未定义的。

我们可以用object.defineproperty设置对象的属性描述符。例如:

复制代码代码如下所示:

使用 / / __proto__

object.defineproperty(obj,关键的,{)

__proto__: / /空,遗传性能不

价值:静态的/不可数

不可配置

不可写

作为默认值

});



从上面的例子中,我们可以看到描述符具有继承的特性。我们明确设置描述符对象为空,__proto__,避免了从object.prototype.of相应属性的继承,我们可以显式设置的所有属性的描述:

复制代码代码如下所示:

是/显式的

object.defineproperty(obj,关键的,{)

枚举:假,

可配置:false,

可写的:false,

价值:静态的

});



这个效果与第一段代码相同。

下面是访问描述符的一个示例:

复制代码代码如下所示:

一个对象的属性的例子添加 /与一个访问器的属性说明符defineproperty

VaR值= 38;

object.defineproperty(obj,关键的,{)

得到:(){ return函数值;},

设置:功能(价值){ b =价值;},

枚举:真,

配置:真

});



需要注意的是,访问描述符和数据描述符不能混淆:

复制代码代码如下所示:

不能混合两者:

object.defineproperty(obj,'conflict,{)

价值:0x9f91102,

得到:函数(){ return 0xdeadbeef;}

});

抛出一个列表的属性描述符必须 /不指定一个值

或者当指定了一个吸气剂/或设置器时是可写的。



类型

如果你想知道在运行时的类型的一个变量,你可以使用typeof运算符,类型的返回值如下:



有一个需要注意的是,这类空= =对象的原因是:

在Javascript 1中,Javascript中的值由类型标记(类型标记)和实际值的结构表示。对象的类型标记为0。空是空指针(0x00)在C语言中,所以零式符号0。

以上是本文的全部内容,有小伙伴需要参考。