强弱类型的判别
按照计算机语言的类型系统的设计方式,可以分为强类型和弱类型两种。
二者之间的区别,就在于计算时是否可以不同类型之间对使用者透明地隐式转换。
What
弱类型
从使用者的角度来看,如果一个语言可以隐式转换它的所有类型,那么它的变量、表达式等在参与运算时,即使类型不正确,也能通过隐式转换来得到正确地类型,这对使用者而言,就好像所有类型都能进行所有运算一样,所以这样的语言被称作弱类型。
强类型
与此相对,强类型语言的类型之间不一定有隐式转换。强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。
java、.NET、C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
例如你有一个整数,如果不显式地进行转换,你不能将其视为一个字符串。
转换
弱类型转换
一般规律是,约束越强越不容易出错,但编写程序时也越麻烦。在JavaScript中,因为约束比较弱,所以容易出现这种错误:最简单的例子:
var a =200;
var b ="1";
var c= a + b;
你可能期望c是201,但实际上它是"2001",这个错误在强类型语言中决不会出现。然而正是因为JavaScript没有这些约束,所以可以很方便地拼接数字和字符串类型。
在循环语句中(if,while)中,一个Object对象可以隐式的转换从BOOLEAN值。
var obj = {name:'jack'}
if(obj){
//do more
}
强类型转换
强类型如c,在c中的算术转换中对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型
强类型如c,在c中的算术转换中对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,如:
(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算。
(2)若运算数中最长的类型为long型.则其他类型数均转换成long型数。
(3)若运算数中最长类型为int型,则char型也转换成int型进行运算。算术转换是在运算过程中自动完成的。
优缺点
弱类型
优点
a、js减少网络传输
在js出现之前,传统的数据提交和验证工作均是由客户端浏览器通过网络传输到服务器上进行,如果数据量很大,这对于网络和服务器的资源来说实在是一种无形浪费,但使用js就可以在客户端就行数据验证。
b、js方便操纵html对象。
js可以方便的操纵html页面中的对象,用户可以使用js来控制页面中各个元素的外观、状态、甚至运行方式。
c、js支持分布式运算。
js可以使多种任务仅在客户端就可以完成,而不需要网络和服务器的参与,从而支持分布式的运算和处理。
缺点
a、各个浏览器对js的支持程度不同
b、web安全对js一些功能有限制,例如读写、保存数据等