首页 > 试题广场 >

下面哪些语句执行结果为true

[不定项选择题]
下面哪些语句执行结果为true
  • 'foo' == new function(){ return String('foo'); };
  • 'foo' == new function(){ return new String('foo'); };
  • [] == 0
  • ![]
  • !0

关于A、B:

function Human(name) {
    this.name = name;
    return {};
}
let one = new Human('c1er');
console.log(one); //输出空对象 Object { }
以上述代码为例:
使用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

答案错误,正如我们所知道的:对象总等于真。
编辑于 2019-12-03 14:13:59 回复(10)
我来说下ab选项:
构造函数始终会返回一个对象:
 情况1:你写了return {a:xxx} 他就会返回你定义的这个对象
情况2:你没写return 或者你return a 一个基本类型 这两种情况(没写或者return基本类型)它都会默认返回一个对象
a选项返回了一个String 所以构造函数会默认返回一个空对象
b选项返回一个String对象(因为有new 所以是字符串对象)所以构造函数就返回了这个String对象

发表于 2020-07-27 00:35:26 回复(5)
在 JS 中,只有 0,-0,NaN,"",null,undefined 这六个值转布尔值时,结果为 false,至于你说的[]转换为0,是当[]置于“=="运算符两侧的时候,将会进行隐式转换,这里很明显不符合这种情况,所以![]是false,答案错误

那位同学问我有没有在谷歌控制台上尝试过,下面是chrome的控制台截图:
[]向number类型的隐式转换是基于“==”运算符的,js中只有 0,-0,NaN,"",null,undefined 这六个值转布尔值时,结果为 false,[]的结果为true
发表于 2019-10-05 08:17:18 回复(10)
这个d真是错的啊
发表于 2019-09-21 22:04:45 回复(0)
new表达式之后的构造函数如果返回基本数据类型,那就返回new返回的匿名对象。 如果返回的是引用类型对象,则覆盖创建的匿名对象。 在类型转换时只有+0,-0,null,undedined,NaN,空字符串会转换为false,其余的都是true。 空数组是对象
发表于 2019-12-18 15:44:05 回复(1)
[]  == 0 //true
当[]在==两侧会进行隐式转换
toPrimitive([]) = '' 是空串  ,Number('')=0 
Number(false) = 0   
所以  []  == 0   [] == false   [] == ''''  

但是![]  中 []是真值,取反之后为假值    由[] == false可知  [] == ![]   //true
编辑于 2020-06-25 10:25:54 回复(4)
[]向number类型的隐式转换竟然会等于0.....🙃🙃
发表于 2019-12-21 08:51:50 回复(0)
一个有趣的现象 ![]==[] // true
发表于 2019-10-01 17:13:10 回复(1)
亲自尝试D选项错误
发表于 2019-10-15 15:16:13 回复(0)
A:返回一个对象。
B:返回相同的字符串。
C:==比较时首先将两边值转化为同一类型,0 == 0 true。
D:[]可以转化为‘’,0,true。但在一元运算中首先转换为number型,!0==true;
E:同上
编辑于 2019-09-24 15:02:11 回复(4)
==
情况:对象、字符串、数值、布尔、null、undefined、NaN
1. 如果有一个是对象,另一个不是,则调用valueOf()方法取得其原始值,如果没有则调用toString()方法
2. 如果有一个是字符串,另一个是数值,则转换为数值
3. 有一个是布尔值,则转换为数字
4. null == undefined // true
5. 有一个是NaN就是false
6. 两个对象之间一般不相等,除非是重新赋值

new 操作符过程:
1 .创建一个新对象,对象的原型指向类构造函数的原型
2. 执行构造函数内部的代码,并将this指向这个对象,同时传递参数
3. 如果构造函数返回中返回了非空对象,则返回该对象,否则的话返回之前创建的新对象
所以String('foo')是 ‘foo’,不是对象,所以返回内部的对象,== 比较时先valueOf(),然后toString()方法----->'[object Object]'
new String('foo') 返回的是String {"foo"}对象,调用toString()方法返回'foo',则有 'foo' == new String('foo')
发表于 2022-03-30 17:15:52 回复(1)
console.log(typeof String('foo')); // string
console.log(typeof new String('foo')); // object

let a = new function() {
    return String('foo');
}
let b = new function() {
    return new String('foo');
}

console.log(typeof a); // {}
console.log(typeof b); // String {"foo"}

编辑于 2021-07-16 14:20:47 回复(0)
当new构造函数时,若有return且基本类型,返回空对象;若应用类型,返回对应的对象
发表于 2021-09-27 00:34:07 回复(0)
new function {return 返回基本类行,则返回一个空对象,如果是复杂类型,直接返回复杂类型对象}
发表于 2021-07-21 15:17:14 回复(0)

关于![]为什么为false。!可将变量转换为布尔类型,null undefined NaN和空字符串取反结果是true,其余的都为false。注意[]== ![]的结果为true。

发表于 2020-03-13 11:13:07 回复(0)
有没有人能解答一下AB为什么呀
发表于 2019-09-07 17:26:39 回复(2)
D是false啊!
发表于 2019-08-06 16:01:27 回复(0)
为什么D![]  为true
发表于 2019-06-24 14:05:11 回复(6)
C选项:

隐式转换中主要涉及到三种转换:

1、将值转为原始值,ToPrimitive()。

2、将值转为数字,ToNumber()。

3、将值转为字符串,ToString()。

ToPrimitive有这样的签名

1、该对象为Date类型,则PreferredType被设置为String
2、否则,PreferredType被设置为Number

PreferredType为Number的转换过程


过程

参考


发表于 2022-03-08 11:28:40 回复(0)