网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月01日漏签0天
javascript吧 关注:269,158贴子:906,476
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 首页 上一页 1 2 3 4 5 6 7 8 下一页 尾页
  • 143回复贴,共8页
  • ,跳到 页  
<<返回javascript吧
>0< 加载中...

回复:去面试惨败归来,几道题

  • 只看楼主
  • 收藏

  • 回复
  • gainover
  • Error
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这一个题目,
{}+'a' < {} +'b';
+ 的用法
If Type(lprim) is String or Type(rprim) is String, then
a.
Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)
因为 rprim='a' 是字符串, 所以
{}+'a' = ToString({}) + 'a'= "[object Object]a"
{} +'b' = "[object Object]b"
因此 {}+'a'<{}+'b' 为true ;
至于你说的 {}+'a' 的值为 NaN 。。 我觉得是不是被 chrome 的 console 误导了?




  • 广播剧社江滨柳
  • switch
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我对着文本分析,和你的结果一样.
但是firebug和chrome的结果都一样....
都是NaN
我不禁犯愁了....


2026-01-01 20:18:18
广告
不感兴趣
开通SVIP免广告
  • 广播剧社江滨柳
  • switch
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我又看了一下,IE也是如此
如果你分别将两个值赋予变量
和
直接比较
结果不同


  • 广播剧社江滨柳
  • switch
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • gainover
  • Error
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我想这个问题有可能与语言本身无关了,可能是控制台在输出表达式的值时,内部实现不一样?


  • 广播剧社江滨柳
  • switch
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
蛋疼的问题啊.
我去询问之


  • abiao5555
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
{}+'a'>{}+'b' 应该是被解析成 2句,
{};
+'a'>{}+'b';
我曾经认为,js引擎在解析代码时,表达式在赋值和运算中是贪婪匹配的,
http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=18361737679&z=1484356434
按这个想法,为什么 {}+'a' 没有按贪婪匹配,我只能说,解析到这个{} 时还没出现运算符,当然这个贪婪匹配的说法也是自己猜测,没有求证过。




  • abiao5555
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
var x = {}+1 // x 为 '[object object]1'


2026-01-01 20:12:18
广告
不感兴趣
开通SVIP免广告
  • 何必绝时知音2
  • while
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回想前几天面试,写笔试题,我一顿乱写,错了大把,那个女的竟然说我是做得最快最好对得最多的,看来上帝要帮我了


  • liuriweiyang_1
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一看到跨域我觉得就是一个大公司的题目,网易什么的


  • liuriweiyang_1
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
13题想想alert({}+'a')是"[[object Object]]a"嘛


  • 荧光小妹
  • while
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
完全不会


  • a20407
  • switch
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你这是去腾讯了还是去115了,这题出的相当强大,表示鸭梨很大啊


  • 柳下惠gg
  • trycatch
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
30楼。。同样是成熟魅力高中英语老师控求握爪。。


2026-01-01 20:06:18
广告
不感兴趣
开通SVIP免广告
  • 广播剧社江滨柳
  • switch
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
据说是因为{}不仅可以作为对象直接量的语法糖,也是语句块的包围器。
在console里面执行语句,实际上是传给eval()函数执行。
eval函数遇到 { 就会认为这是语句块的开始,然后开始看,结果遇到了 } 。于是认为语句块结束。语句块本身的值是最后一个执行的表达式的值。所以,在console中执行{}会返回undefine。
而如果在console中执行({}),会返回一个空object。这个是因为()是用来改变运算符优先级的。
var a = {}+'a'
此时a是"[object Object]a",盖因等号右边的表达式默认是要求值的。等号左边的则不然。
a = {}+'a'<{}+'b'
a的值为true,理由同上。
alert({}+'a')弹出的是"[object Object]a",alert({}+'a'<{}+'b')弹出的是true,因为表达式在被传进函数里之前也是要求值的。
而在console中执行,或者在eval()函数里执行,系统就会把{}看成语句块。我本来想当然的以为,<的优先级低于+,所以会先执行加法运算。但我忘记了+也可能作为一元运算符。此时它的作用大概相当于将参数转换成数值(parseNumber)。
于是,整个语句也就被机器看成这个样子了:
{
//我是一个语句块,啦啦啦
}
+'a'<{}+'b'
{}的返回值是undefined这个刚才已经说过了。
然后执行+'a'<{}+'b'。<这个运算符一定是二元运算符,所以可以看成一个必须传两个参数的函数。
左边+'a'求值等于NaN。右边的有所不同。因为+的运算优先级高于<,所以此语句相当于+'a'<({}+'b')
即:NaN<"[object Object]b"
返回false
这两个语句,eval()函数的返回值取最后一个值,即false。
所以,{}+'a'<{}+'b'在console里执行的时候会返回false


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 2 3 4 5 6 7 下一页 尾页
  • 143回复贴,共8页
  • ,跳到 页  
<<返回javascript吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示