Ajax 板


LINE

※ 引述《cyclone350 (老子我最神)》之铭言: : 标题: [问题] js型态转换问题 : 时间: Wed Jun 4 12:28:40 2014 : 大家好,这几天再看一些 javascript 的东西 : 虽然我页面的javascript都用的顺顺的... : 但是有些观念真的是超级难以理解... : : 举一个例子... : 在型态转换这方面... : > 2 + 3 + '4' : 54 : 可以理解成 2 + 3 = 5, 5 + '4' 时 5会被转成 String '5' : 这没问题 : 可以想成 number + String 会被转成 String : 而 true 跟 false 的 boolean 转换规则 true 代表 1,false 代表 0 : 所以会有以下例子 : >false == 0 : true : >5==true : false : 这也没问题 : 另外还有一个规则就是"除了0、NaN、''、null、undefinied是假的(false)之外,其它 : 都是真的(true)。" : 这也可以想像... 上面都很正确没问题 不过当你把转换跟逻辑比较混在一起就错了 在EMCA规范里 这些逻辑比较都有额外的比较规范,并不一定会产生转型 回底下的东西前先送上EMCAScript规格书OwO http://goo.gl/SGKp01 (http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf) : 不过细节部分就很模糊了... 例如 : >false == 0 : true : 他到底是把 false 转成 0,还是把 0 转成 false ? : 是否跟位置有关? 详见11.9.1&11.9.3 一路会跑到 18.If Type(x) is Boolean,return the result of the comparison ToNumber(x) == y. 而ToNumber(false) => 0 所以是true : 以下就是一个 WTF : > typeof null : 'object' : > 0==null : false 根据11.9.3 20.If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y). ToPrimitive(null) => null 所以 0 != null 更正 null并不是Object... 而是 22. Return false. 一路到最後都不合的回传false : >1+null : 1 11.6.1 总之最後是1+0 所以你前面认知无误 : 经过书本或网路上有看过 'object' 做运算或比较会先呼叫 valueof 方法,若没有 : valueof方法则呼叫 toString 方法 不怎完整,其实不管哪个operator步骤都挺罗嗦的... : > 0==null : false : 所以可能代表 null 不能转成 0 (透过 valueof 或 toString) 这个比较不存在转换 : 可是 1+null = 1 : null 又被转成 0 了........???????? 这里才是真正转换 所以被转成0了 : 以下更 WTF : >null == undefined : true 11.9.3 14. If x is null and y is undefined, return true. 不用怀疑 这等式是强制规范,连转都不用转 : >1+null : 1 上面提了 : >1+undefined : NaN 11.6.1&11.6.3 ToNumber(undefined) => NaN 1+NaN => NaN : 到底是怎麽转的.... : 而且 : > typeof undefined : undefined : >typeof null : object : 那 null == undefined 到底是转成甚麽鬼东西? 上面说了 这比较根本没转,是强制规范 : 在良葛格型态转换章节最後有提到一句 : "在弱型别语言中,型态转换往往自动发生,最好还是实际测试了解结果, : 避免不必要的型态转换而发生误判或错误的运算结果。" : : 意思难道是说 "我根本不知道在型态转换到底是怎麽转的,反正测测看就知道了" ? : 并不是要呛良葛格的意思... 你看看整份EMCAScript规格书 你想遇到问题直接试试如何 还是要背完整份呢(笑 : 但是在型态转换中 java 语言可以清晰清楚地写出转换规则及逻辑 : 而 javascript 却是说 测测看结果 ? : : 更怪的是这个 : > typeof null; : object : > null instanceof Object; : false 这边就是奇妙的规范了... 根据8.2&11.4.3 null的type实际上是Null Type 不过typeof的回传被规范成object 所以结论上,理所当然不是Object的instance 大概只算是伪装成object (? : 我在看 javascript 书时也常常出现 "这很怪", "这没规范", "这样写在某些地方可以执 : 行" : 而且还把js称作 "bug丛生的javascript" (by 驾驭javascript的68个具体作法) : : : 虽然我觉得我根本不了解js,不过我在web页面仍然可以写出可以跑得 js 或 jquery : 我仍然可以套用 jquery UI , 写 Ajax, 使用 js 做基本客户端互动介面。 : : 对各位而言,javascript 是一个怎麽样的语言? : 不知道是我根本没搞懂js,还是js本身就是一个不想让人懂的语言? 我是觉得啦 用这这种弱型别的语言就不要管太多太底层的东西 不然他帮你包好好的意义不就消失了? 顶多注意一下别被某些型别转换整到就好 : 型态转换有没有一个具体的逻辑可以来讲解? 前附的规范书整本看完你就能成为JS大师喔^.< : -- :



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.218.64.133
: ※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ajax/M.1401856122.A.9AF.html : 推 GoalBased:不要钻牛角尖= = 06/04 12:34 : → GoalBased:JS当然也会有一个转换的标准方式阿 只是没关心罢了 06/04 12:35 : → mmis1000:ecma 规范里都有写啊 06/04 12:40 : 推 ck574b027:NaN != NaN 才叫做 WTF 06/04 17:06 根据11.9.3 只要两侧都数字 任一侧出现NaN就一律回传false : 推 mmis1000:不是一个数字 不等於 不是一个数字,很奇怪吗? 06/04 17:20 : 推 turtleknight:写coffeescript阿XD 06/04 18:04 我承认我太闲了XDD 总之真的想搞清楚就看EMCAScript的规范吧 不过真的要写JS还是别管这些了 除非你打算开发一个JS直译器www --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.115.216.102
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ajax/M.1401886865.A.965.html
1F:推 s25g5d4:推推 06/04 21:10
※ 编辑: danny8376 (140.115.216.102), 06/04/2014 21:13:39
2F:推 cyclone350:推~ 大概了解了~ 就是不求甚解!! 一切都是规定,没有合 06/04 23:38
3F:→ cyclone350:不合理的问题 !! 所以也不用做逻辑推倒 ! 06/04 23:39
4F:推 Peruheru: 推导 推倒脏脏 07/22 09:40







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP