为什么用不!! MS AJAX中的布尔值?

3 javascript asp.net-ajax

从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;
Run Code Online (Sandbox Code Playgroud)

}

请看最后一行代码,为什么用!! 而不只是返回类型.__类?

谢谢!

Tri*_*ych 8

作者一定不能认为type.__class保证是一个布尔值.因为您可以将任何对象传递给Type.isClass():

Type.isClass(3);
Type.isClass({});
Type.isClass(AnActualClassFunction);
Run Code Online (Sandbox Code Playgroud)

...实际上并不能保证type.__class会有一个布尔值.

当然,这不是ASP.NET AJAX"类"参数一般不会有一个__class属性-因此,如果程序只是返回type.__class,可能的返回值是true,falseundefined.对于用于返回布尔值的例程,这是不合需要的.

!!type.__class只保证返回一个布尔值(truefalse)(undefined将被转换为false).