Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript toBoolean方法类似于toString_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript toBoolean方法类似于toString

Javascript toBoolean方法类似于toString,javascript,ecmascript-6,Javascript,Ecmascript 6,有没有一种方法可以在JavaScript中的对象/类上定义一个方法,它的行为类似于只针对布尔值的toString?示例(es6): 所以我可以这样做 const myClass = new MyClass(); if (myClass === true) baz(); 听起来很疯狂,但我还是要问一下。恕我直言,即使这可能是个糟糕的主意: const myClass = new MyClass(); myClass.foo = true; if (myClass === true) baz()

有没有一种方法可以在JavaScript中的
对象
/
上定义一个方法,它的行为类似于只针对布尔值的
toString
?示例(es6):

所以我可以这样做

const myClass = new MyClass();
if (myClass === true) baz();

听起来很疯狂,但我还是要问一下。

恕我直言,即使这可能是个糟糕的主意:

const myClass = new MyClass();

myClass.foo = true;
if (myClass === true) baz();  //true
if (myClass) foobaz(); //true, as expected, since myClass === true

myClass.foo = false; 
if (myClass === true) baz(); // false
if (myClass) foobaz(); //true - wtf?

恕我直言,即使有可能,这也是个糟糕的主意:

const myClass = new MyClass();

myClass.foo = true;
if (myClass === true) baz();  //true
if (myClass) foobaz(); //true, as expected, since myClass === true

myClass.foo = false; 
if (myClass === true) baz(); // false
if (myClass) foobaz(); //true - wtf?

这将解决您的问题,它将把任何类型转换为布尔型

function Fun (){

}
Fun.prototype.toBoolean = function(a) {
  return !!a;
}

var obj = new Fun("str");
obj.toBoolean("str");
obj.toBoolean(1);
obj.toBoolean({});
obj.toBoolean(0);

这将解决您的问题,它将把任何类型转换为布尔型

function Fun (){

}
Fun.prototype.toBoolean = function(a) {
  return !!a;
}

var obj = new Fun("str");
obj.toBoolean("str");
obj.toBoolean(1);
obj.toBoolean({});
obj.toBoolean(0);

除了像drewmoore指出的那样是一罐蠕虫之外,用JavaScript根本不可能做到这一点

没有“钩子类型转换”的特性,如重载C++中的CAST运算符。

之所以
toString
似乎做了类似的事情,只是因为很多人但
==
没有做类似的事情-事实上,
==
的“卖点”是它没有类型转换


因此,没有办法神奇地将其转换为布尔值进行这样的比较。人们仍然需要使用
if(myClass.toBoolean()==true)
,然后根据方法的实际功能来命名方法会更有意义,例如
if(myClass.isValid())
或其他任何东西。

除了drewmoore指出的可能是一罐蠕虫之外,用JavaScript根本不可能做到这一点

没有“钩子类型转换”的特性,如重载C++中的CAST运算符。

之所以
toString
似乎做了类似的事情,只是因为很多人但
==
没有做类似的事情-事实上,
==
的“卖点”是它没有类型转换


因此,没有办法神奇地将其转换为布尔值进行这样的比较。仍然需要使用
if(myClass.toBoolean()==true)
,然后根据方法的实际功能命名方法会更有意义,例如
if(myClass.isValid())< /p>或任何。

它甚至不工作,因为使用“<代码> = = = < /代码>时,不会发生StrugType强制。不能在C++中重载CAST运算符之类的东西。”code>toString
有点特殊,因为许多函数都会在对象上隐式调用
toString
,但
===
不会这样做。因此,没有办法神奇地将其转换为布尔值进行这样的比较。我们仍然需要使用
if(myClass.toBoolean()==true)
,然后根据方法的实际功能命名方法会更有意义,例如
if(myClass.isValid())
:请注意,即使是
新的布尔值(false)
也被认为是
true
。请注意,即使使用松散比较(
=
),每当你将布尔值和不同的数据类型进行比较时,你会比较数字,因为布尔值被转换成一个数字。它甚至不工作,因为使用StyType强制时不会发生使用<代码> = = = /COD>你不能做的事情,比如在C++中重载Caster运算符。code>toString有点特殊,因为许多函数都会在对象上隐式调用
toString
,但
===
不会这样做。因此,没有办法神奇地将其转换为布尔值进行这样的比较。我们仍然需要使用
if(myClass.toBoolean()==true)
,然后根据方法的实际功能命名方法会更有意义,例如
if(myClass.isValid())
:请注意,即使是
新的布尔值(false)
也被认为是
true
。请注意,即使使用松散比较(
=
),每当您将布尔值与其他数据类型进行比较时,您都会比较数字,因为布尔值首先转换为数字。@Thilo将其删除。@Thilo将其删除。