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

时间:2008-12-23 17:01:58

标签: 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;

}

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

谢谢!

3 个答案:

答案 0 :(得分:8)

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

Type.isClass(3);
Type.isClass({});
Type.isClass(AnActualClassFunction);

...实际上无法保证type.__class具有布尔值。

当然,不是ASP.NET AJAX“类”的参数通常不会有__class属性 - 所以如果例程只返回type.__class,则可能的返回值为{ {1}},truefalse。对于用于返回布尔值的例程,这是不合需要的。

undefined只保证返回一个布尔值(!!type.__classtrue)(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