JavaScript 弱类型浅谈
来源:互联网 发布:win7一拖二软件 编辑:程序博客网 时间:2024/04/26 21:33
1,强弱类型的判别;
按照计算机语言的类型系统的设计方式,可以分为强类型和弱类型两种。二者之间的区别,就在于计算时是否可以不同类型之间对使用者透明地隐式转换。从使用者的角度来看,如果一个语言可以隐式转换它的所有类型,那么它的变量、表达式等在参与运算时,即使类型不正确,也能通过隐式转换来得到正确地类型,这对使用者而言,就好像所有类型都能进行所有运算一样,所以这样的语言被称作弱类型。与此相对,强类型语言的类型之间不一定有隐式转换。强类型如c,在c中的算术转换中对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型。
在进行运算时,以表达式中最长类型为主,将其他类型位据均转换成该类型,如:
(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算。
(2)若运算数中最长的类型为long型.则其他类型数均转换成long型数。
(3)若运算数中最长类型为int型,则char型也转换成int型进行运算。算术转换是在运算过程中自动完成的。
2,js弱类型的体现
一般规律是,约束越强越不容易出错,但编写程序时也越麻烦。在JavaScript中,因为约束比较弱,所以容易出现这种错误:最简单的例子:
var a =200;
var b ="1";
var c= a + b;
你可能期望c是201,但实际上它是"2001",这个错误在强类型语言中决不会出现。然而正是因为JavaScript没有这些约束,所以可以很方便地拼接数字和字符串类型。
再比如下面这个例子:
var a = '11';
a = a - '';
alert(typeof a);// -->number
“-”可以是一元运算符(取负),也可以是二元(减法运算)
在循环语句中(if,while)中,一个Object对象可以隐式的转换从BOOLEAN值。
var obj = {name:'jack'}
if(obj){
//do more
}
比较难以发现的是在alert()函数中。
String.prototype.fn = function(){return this};
var a = 'hello';
alert(typeof a.fn()); //-->object
alert(a.fn()); //-->hello
我们知道this可以理解成当前类的实例对象,既然是对象那么typeof a.fn()自然返回是object了。
关键是最后的alert(a.fn()),a.fn()返回的明明是对象,但却隐式的转换成了字符串“hello”显示。
1 0
- JavaScript 弱类型浅谈
- JavaScript类型浅谈
- 【javascript】浅谈javascript中的对象和类型
- 浅谈JavaScript引用类型——RegExp
- 浅谈JavaScript引用类型——Function
- 浅谈JavaScript引用类型——Array
- 浅谈JavaScript引用类型——Object
- 浅谈JavaScript引用类型——Date
- 浅谈JavaScript七种数据类型
- 浅谈JavaScript引用类型——基本包装类型
- 浅谈PHP弱类型安全
- 浅谈PHP弱类型安全
- 浅谈PHP弱类型安全
- 浅谈JavaScript中的对象和类型(上)
- 浅谈javascript六种数据类型以及特殊注意点
- javascript变量弱类型
- JavaScript 浅谈
- 浅谈JavaScript
- iOS8 添加毛玻璃效果
- 详解让C++新手闹心的语句“cout<<"Hello!"<<endl;”
- HDOJ 1040 As Easy As A+B
- python学习笔记(4)-进程和线程(二)-多线程
- KVC/KVO的理解
- JavaScript 弱类型浅谈
- java中的冒泡排序
- hog.detectMultiScale过程学习
- 求100以内的素数
- ajax学习总结前传--HTTP请求介绍
- UIScrollView基本使用
- 用户添加sudo权限
- PHP数据库操作
- nyoj--148 fibonacci数列(二)(矩阵快速幂)