Javascript中对象类型自动化转换
作者:草依山 日期:2010-02-28
今天搞Location时已经想到了这个,typeof document.location时说的是'object',为什么alert的时候不是'object'呢?这个就跟js中的Object对象的类型转换有关了~~~
js作为一个弱类型语言,很多操作会将类型自动转换,譬如说'23' + 1会自动将'23'转化为整形,那么在对对象进行操作时是怎么转化的呢?
答案:在字符串环境将会调用对象的toString方法,在数字环境将会调用对象的valueOf方法,如果对象本身没有定义toString方法,那么 将用Object的,如果对象本身没有定义valueOf方法,那么就会先尝试调用它自身的toString方法再进行类型转换。
- var objA = {
- a:123,
- toString:function(){return 1},
- valueOf:function(){return 12}
- }
- var objB = {
- a:12,
- toString:function(){return 1},
- valueOf:function(){return 2}
- }
- alert(String(objA) == String(objB)) //true 串,调用toString
- alert(objA + 1 == objB + 1);//false 数字,调用valueOf
- alert(objA > objB)// true 数字,调用valueOf
有没有想到些什么?我想的是==运算符会不会也是先调对象的valueOf然后进行比较,那么我们能不能两个长得完全不一样,却相等的对象?
- var objA = {
- jj:123,
- toString:function(){return 1},
- valueOf:function(){return 2}
- }
- var objB = {
- mjj:12,
- toString:function(){return 1},
- valueOf:function(){return 2}
- }
- alert(objA == objB)//false
Tags: javascript object 类型转换
关于window.location和document.location
作者:草依山 日期:2010-02-28
一直以来都有这样一个观点,window.location与document.location并不相同,前者是一个Location对象,而后者只是一个只读字符串,Javascript权威指南14.2.2一直是这么说的。
前段时间遇到一个Bug,排查过程中,发现与location对象的读取有关,一些代码中使用了window.location.href,而另一些代码中使用了document.location.href,并没有导致错误,我也一直以为document.location只是一个字串,这是怎么回事呢?
验证一下就知道了,直接把下面的放到浏览器的地址栏里去:
- javascript:alert(window.location === document.location);
经过测试,没有发现哪个浏览器返回false!!! 震惊,也就是document.location和windo.location引用的是同一个对象,一模一样的~~~
古人云:尽信书则无书
年会
作者:草依山 日期:2010-02-02
用CSS3实现的JS特效
作者:草依山 日期:2010-02-01
虽然早就知道了,但是在我还没有用JS实现这些特效前,看到了用几行css就实现了,感觉还是很不爽
链接在这里 ,仅支持webKit核心的浏览器,比如chrome, safari
Tags: javascript effect motion css3