[] == ![] 为true
下面哪些语句执行结果为true
A
'foo' == new function(){ return String('foo'); };
B
'foo' == new function(){ return new String('foo'); };
C
[] == 0
D
![]
E
!0
正确答案:BCE
关于A、B:
以上述代码为例:
使用new运算符调用函数时,会返回一个对象。
如果构造函数没有return语句时,则默认返回原型为Human.prototype的、设置了属性name的对象。
然而就像Class的constructor一样,return语句返回一个对象时,该对象将被作为new操作符的结果返回。
因此。
A:String()作为普通函数使用时,将值转为字符串,不是对象,默认返回是一个空对象,原型为匿名函数的prototype。
String(new function(){ return String('foo'); })
"[object Object]"
B:String()作为构造函数来用时,返回了一个字符串包装对象。
String(new function(){ return new String('foo'); })
"foo"
关于D
答案错误,正如我们所知道的:对象总等于真。
如果对象不存在那么他调用实例方法的时候就会报错,能调用就说明已经被实例化出来了。
对象是引用类型的值,引用地址是判断对象为不为真的依据,每一个对象都有自己的引用地址,因此每一个对象都必然为真,而不是{}的属性和属性值,
没有属性和属性值只能说他是一个空对象,空对象和其他对象一样都有引用地址。
我来说下ab选项:
构造函数始终会返回一个对象:
情况1:你写了return {a:xxx} 他就会返回你定义的这个对象
情况2:你没写return 或者你return a 一个基本类型 这两种情况(没写或者return基本类型)它都会默认返回一个对象
a选项返回了一个String 所以构造函数会默认返回一个空对象
b选项返回一个String对象(因为有new 所以是字符串对象)所以构造函数就返回了这个String对象
new表达式之后的构造函数如果返回基本数据类型,那就返回new返回的匿名对象。
如果返回的是引用类型对象,则覆盖创建的匿名对象。
在类型转换时只有+0,-0,null,undedined,NaN,空字符串会转换为false,其余的都是true。
空数组是对象 ,空对象和其他对象一样都有引用地址,每一个对象都有自己的引用地址,因此每一个对象都必然为真
[] == 0 //true
当[]在==两侧会进行隐式转换
toPrimitive([]) = '' 是空串 ,Number('')=0
Number(false) = 0
所以 [] == 0 [] == false [] == ''''
但是![] 中 []是真值,取反之后为假值 由[] == false可知 [] == ![] //true
左侧的![]转换为false ,右侧的[]在==关系运算符下隐式转换为0,所以相等没毛病
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17835934.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)