Каждая ассоциация содержит два независимых утверждения:
Быть связанным может означать, что P или C имеют атрибут типа C или P. Это наиболее распространенное воплощение ссылка, но UML не прописывает это.
JavaScript интерпретирует пустую строку как 0, что затем не проходит тест isNAN. Сначала вы можете использовать parseInt для строки, которая не преобразует пустую строку в 0. Затем результат должен завершиться ошибкой isNAN.
Я не уверен почему , но обойти проблему вы всегда можете обрезать пробелы перед проверкой. Вы, вероятно, все равно хотите это сделать.
Если вы хотите реализовать точную функцию isNumber, вот один из способов сделать это из Javascript: The Good Parts Дугласа Крокфорда [страница 105]
var isNumber = function isNumber(value) {
return typeof value === 'number' &&
isFinite(value);
}
Попробуйте использовать:
alert(isNaN(parseInt(" ")));
Или
alert(isNaN(parseFloat(" ")));
Я думаю, это из-за набора текста в Javascript: ''
преобразуется в ноль тогда как 'x'
не является:
alert(' ' * 1); // 0
alert('x' * 1); // NaN
Чтобы лучше это понять, откройте спецификацию Ecma-Script pdf на стр. 43 «ToNumber Applied to String Type»
, если строка имеет числовой синтаксис, который может содержать любое количество пробелов, его можно преобразовать в тип Number. Пустая строка имеет значение 0. Также строка 'Infinity' должна давать
isNaN('Infinity'); // false
Вы можете найти это удивительным, а может и нет, но вот некоторый тестовый код, чтобы показать вам дурацкость движка JavaScript.
document.write(isNaN("")) // false
document.write(isNaN(" ")) // false
document.write(isNaN(0)) // false
document.write(isNaN(null)) // false
document.write(isNaN(false)) // false
document.write("" == false) // true
document.write("" == 0) // true
document.write(" " == 0) // true
document.write(" " == false) // true
document.write(0 == false) // true
document.write(" " == "") // false
, так что это означает, что
" " == 0 == false
и
"" == 0 == false
, но
"" != " "
Веселитесь :))