Каноничный пример
function echoit($msg) { echo '<br><pre>'; if($msg) echo htmlents(print_r($msg, true)); else var_dump($msg); // без этой штуки увидишь вместо null и false - ничего echo '</pre><br>'; } Такое впечатление что JS планировался для домохозяек, которые если null не увидят, то неделю будут его искать. Я интерфейс не рендерю, а кто рендерит - они как эти бесконечные нуллы обходят? |
Потому что title - строка. Что бы ты не записал туда - оно будет приведено к строке. Что тут непонятного?
Никак не обходят, никаких null в интерфейс попасть не может. |
Это понятно, непонятно откуда берутся целых 4 буквы из null. Если там ничего не было, то в строке должно быть ""
|
Цитата:
Только не надо про то что null это особый случай, что это специально так сделано. Любой нормальный программист естественно ожидает что null в строке станет или "" или 0 - не символ, а код. |
Если бы я title проверял на null, как я однажды проверял !dataset.somevar - так то я уже запомнил, что не будет там !, там будет строка из четырех букаф, мило, блин. Ну а если вы в консоли видите null - откуда уверенность что он в интерфейс не попадет? Откуда-то взялся где его вернули, вы ставляете, вместо пусто - хрень какая непонятная домохозяйкам.
|
Хватит воевать с языком. Примитивы в javascript преобразуются в строку как явно. Не "любой программист" ожидает, а ты ожидаешь. Так устроен js и не иначе. Хочешь пустую строку - выводи пустую строку, а не рандомную хрень.
|
Я задал конкретный вопрос как делают чтобы нуллы не попадали в интерфейс. Где нажать, что профтыкать в прото типа, чтобы не проверять каждый раз кто там что вернул и как оно обернется.
|
Цитата:
var WshShell = WScript.CreateObject("WScript.Shell"); strPath = WshShell.currentDirectory; var fso = new ActiveXObject("Scripting.FileSystemObject"); var text = ['one', 'two', null, 0, false, true, null, "0", 0]; var out_file_name=fso.BuildPath(strPath, 'test_null.txt'); var ts = fso.CreateTextFile(out_file_name, true, true); ts.Write(text.join("\n")); ts.Close(); Код:
test_null.txt |
Существует поверье что при нестрогом сравнении "нет" вычисляется для: "" пустой строки, [], пустого массива, 0 - нуля, null и false (хотя false это все что !0 бинарно). Когда пофигу то ! должен работать на всем перечисленном. Когда не пофигу, тогда === пофигу.
|
И тут я вспомнил что в __toString() рендер не показывает true и false и захотел показать. И что вы думаете? Оказывается в php вообще нет нормальных методов приведения boolean к строке. var_export() корежит все остальное, а strval() фактически явный вызов неявной функции. В итоге true получается 1, а false == "". Полегчало когда понял что смысла нет. Идиотизм же в html, капец: autocomplete="off" novalidate="on" disabled="true" readonly вообще индикатор.
|
Часовой пояс GMT +3, время: 20:16. |