Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему alert(18306744..toString(32)); выводит Hello (https://javascript.ru/forum/misc/51382-pochemu-alert-18306744-tostring-32-%3B-vyvodit-hello.html)

kostyanet 05.11.2014 21:17

Каноничный пример
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 не увидят, то неделю будут его искать.

Я интерфейс не рендерю, а кто рендерит - они как эти бесконечные нуллы обходят?

Aetae 05.11.2014 21:28

Потому что title - строка. Что бы ты не записал туда - оно будет приведено к строке. Что тут непонятного?
Никак не обходят, никаких null в интерфейс попасть не может.

kostyanet 05.11.2014 21:32

Это понятно, непонятно откуда берутся целых 4 буквы из null. Если там ничего не было, то в строке должно быть ""

kostyanet 05.11.2014 21:33

Цитата:

Сообщение от Aetae
Никак не обходят, никаких null в интерфейс попасть не может.

В первом предложении вы объяснили как оно туда попадает.

Только не надо про то что null это особый случай, что это специально так сделано. Любой нормальный программист естественно ожидает что null в строке станет или "" или 0 - не символ, а код.

kostyanet 05.11.2014 21:40

Если бы я title проверял на null, как я однажды проверял !dataset.somevar - так то я уже запомнил, что не будет там !, там будет строка из четырех букаф, мило, блин. Ну а если вы в консоли видите null - откуда уверенность что он в интерфейс не попадет? Откуда-то взялся где его вернули, вы ставляете, вместо пусто - хрень какая непонятная домохозяйкам.

Aetae 05.11.2014 21:50

Хватит воевать с языком. Примитивы в javascript преобразуются в строку как явно. Не "любой программист" ожидает, а ты ожидаешь. Так устроен js и не иначе. Хочешь пустую строку - выводи пустую строку, а не рандомную хрень.

kostyanet 06.11.2014 07:33

Я задал конкретный вопрос как делают чтобы нуллы не попадали в интерфейс. Где нажать, что профтыкать в прото типа, чтобы не проверять каждый раз кто там что вернул и как оно обернется.

kostyanet 06.11.2014 07:39

Цитата:

Сообщение от Aetae
Примитивы в javascript преобразуются в строку как явно

Как-то не весь ява-скрипт:

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

one
two

0
false
true

0
0


kostyanet 06.11.2014 07:46

Существует поверье что при нестрогом сравнении "нет" вычисляется для: "" пустой строки, [], пустого массива, 0 - нуля, null и false (хотя false это все что !0 бинарно). Когда пофигу то ! должен работать на всем перечисленном. Когда не пофигу, тогда === пофигу.

kostyanet 06.11.2014 15:34

И тут я вспомнил что в __toString() рендер не показывает true и false и захотел показать. И что вы думаете? Оказывается в php вообще нет нормальных методов приведения boolean к строке. var_export() корежит все остальное, а strval() фактически явный вызов неявной функции. В итоге true получается 1, а false == "". Полегчало когда понял что смысла нет. Идиотизм же в html, капец: autocomplete="off" novalidate="on" disabled="true" readonly вообще индикатор.


Часовой пояс GMT +3, время: 20:16.