标签:style color os 使用 ar java strong 数据 sp
首先要知道javascript的自动转换,就是该处需要什么类型,那么javascript会自动把目前类型传入该需要类型的构造函数,来生成需要类型
猜想1:undefined在javascript里是一个类估计(不继承object),null是object对象的一个子类,用面向对象的方法看待的话是这样
只有0和空字符串等于false;undefined和null对象并不等于false对象,而null和undefined是相等的
这个怎么理解呢?
猜想2: 在你使用undefined对象和其他object对象进行互动的时候,他会先把自己转变成object对象(Object(undefined);),将返回null
<script>
alert(typeof(Object(undefined)) === ‘object‘);
alert(typeof undefined === ‘object‘);
alert(String(Object(null)===null));
alert(String(Object(undefined)===null));//Object object
</script>
将返回true和false,false,false
这个猜想貌似错误了,Object构造函数知识不足(可能就没有带参数的构造方法)String构造函数知识不足,无法理解返回值
虽然空值不能调用toString方法,但是却可以使用String构造函数进行构造。像decodeURI这样的函数,如果传入的是undefined或者null,返回的是“undefined”和“null”字符串。这点很容易用错。
alert(String(undefined)); //"undefined"
alert(String(null)); //null
这个估计只是是构造函数里的特殊判断,无意义
假值和空值有一个共性,那就是在作为if的条件分支时,均被视为false;应用“!”操作之后得到的均为true。
Boolean构造函数的特殊定义,无意义,无法验证是先转换object对象还是直接就是的defined对象传入,一个简单的验证法被提出,去研究
arguments对象是否为object,新的理论被提出,关于typeof()(仅仅返回一个string..)无法验证继承属性
<script>
alert(typeof(false) === ‘object‘); //false
alert(typeof(0) === ‘object‘); //false
</script>
只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。
注释:null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
一种面向对象语言需要向开发者提供四种基本能力:
ECMAScript 支持这些要求,因此可被是看做面向对象的。
早
绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。在 Java 和
Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用
IntelliSense(即给开发者提供对象中属性和方法列表的功能)。ECMAScript 不是强类型语言,所以不支持早绑定。
另一方面,
晚绑定(late
binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。
ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。
简单来说javascript顶层元素封装成了8大类,而之间并无继承关系.那么就会为了比如toString写8次..
那么这些判断的实现和转换无非就是各种构造方法中的特定判断而已..
在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的规则如下:
在比较时,该运算符还遵守下列规则:
公司服务器坏了,无聊按面向对象的方法分析下javascript的空值和假值
标签:style color os 使用 ar java strong 数据 sp
原文地址:http://www.cnblogs.com/mikueye/p/4006340.html