почему бы не использовать !! для логического значения в MS AJAX? - PullRequest
3 голосов
/ 23 декабря 2008

Из исходного кода 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 ]

8 голосов
/ 23 декабря 2008

Автор не должен был думать, что type.__class гарантированно является логическим значением. Так как вы можете передать любой объект Type.isClass():

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

... действительно нет гарантии, что type.__class будет иметь логическое значение.

Конечно, параметры, которые не являются "классами" ASP.NET AJAX, обычно не имеют свойства __class - поэтому, если подпрограмма просто вернула type.__class, возможные возвращаемые значения будут true, false и undefined. Это нежелательно для процедуры, предназначенной для возврата логического значения.

!!type.__class только гарантирует, что будет возвращено логическое значение (true или false) (undefined будет преобразовано в false).

0 голосов
/ 23 декабря 2008

Так что в принципе нет никакой разницы между !! val и Boolean (val)

var val; // val is undefined
alert(!!val); // display false
alert(Boolean(val)); // display false as well
0 голосов
/ 23 декабря 2008

Гарантированное безопасное логическое преобразование.

...