数码资讯
Javascript中数据类型的深入研究
学习程序语言只不过是两个方面:一个是语法,二个是数据类型,C类语言的语法无非是函数,算术运算等等,而面向对象的语言则被添加到对象中。 语法是语言的设计者制定一套规则,不同语言的语法是不一样的,但有一些共同点,一个或两个人们熟悉的编程语言,学习其他编程语言,语法往往是没有问题的(当然,如果你已经学习了
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
学习程序语言只不过是两个方面:一个是语法,二个是数据类型,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。
以上是本文的全部内容,有小伙伴需要参考。
语法是语言的设计者制定一套规则,不同语言的语法是不一样的,但有一些共同点,一个或两个人们熟悉的编程语言,学习其他编程语言,语法往往是没有问题的(当然,如果你已经学习了语文课是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。
以上是本文的全部内容,有小伙伴需要参考。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。