来自MS AJAX源代码,
Type.isClass = function Type$isClass(type) {
/// <summary locid="M:J#Type.isClass" />
/// <param name="type" mayBeNull="true"></param>
/// <returns type="Boolean"></returns>
var e = Function._validateParams(arguments, [
{name: "type", mayBeNull: true}
]);
if (e) throw e;
if ((typeof(type) === 'undefined') || (type === null)) return false;
return !!type.__class;
}
请看最后一行代码,为什么用!!而不只是返回类型.__类?
谢谢!
答案 0 :(得分:8)
作者绝不能认为type.__class
是一个布尔值。因为您可以将任何对象传递给Type.isClass()
:
Type.isClass(3);
Type.isClass({});
Type.isClass(AnActualClassFunction);
...实际上无法保证type.__class
具有布尔值。
当然,不是ASP.NET AJAX“类”的参数通常不会有__class
属性 - 所以如果例程只返回type.__class
,则可能的返回值为{ {1}},true
和false
。对于用于返回布尔值的例程,这是不合需要的。
undefined
只保证返回一个布尔值(!!type.__class
或true
)(false
将转换为undefined
)。
答案 1 :(得分:0)
保证安全的布尔转换。
答案 2 :(得分:0)
所以基本上!! val和Boolean(val)之间没有区别
var val; // val is undefined
alert(!!val); // display false
alert(Boolean(val)); // display false as well