Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятное поведение javascript (https://javascript.ru/forum/misc/1702-neponyatnoe-povedenie-javascript.html)

Autosof 04.09.2008 18:39

Непонятное поведение javascript
 
Вопрос к знатокам.

Не могу понять, что крамольного обнаруживает javascript в определении следующей функции:

date_to_string = function (value) {

    return
    '0'.concat(value.getDate()).slice(-2).
    concat('.').
    concat('0'.concat(value.getDay() + 1).slice(-2)).
    concat('.').
    concat(value.getFullYear()).
    concat(' ').
    concat('0'.concat(value.getHours()).slice(-2)).
    concat(':').
    concat('0'.concat(value.getMinutes()).slice(-2)).
    concat(':').
    concat('0'.concat(value.getSeconds()).slice(-2))
}

alert(date_to_string(new Date()))


Обращаясь к ней получаем результат – "undefined"

И абсолютно та же функция, но с использованием промежуточной переменной:

date_to_string = function (value) {

    var str =
    '0'.concat(value.getDate()).slice(-2).
    concat('.').
    concat('0'.concat(value.getDay() + 1).slice(-2)).
    concat('.').
    concat(value.getFullYear()).
    concat(' ').
    concat('0'.concat(value.getHours()).slice(-2)).
    concat(':').
    concat('0'.concat(value.getMinutes()).slice(-2)).
    concat(':').
    concat('0'.concat(value.getSeconds()).slice(-2))

    return str
}

alert(date_to_string(new Date()))


Результат обращения к ней – скажем "04.05.2008 17:31:00".
Тоесть то, что и ожидалось от её работы.

Хотелось бы знать – что не нравиться javascript в первом варианте?!

ZoNT 04.09.2008 18:46

всё прhавильно (представь, что ты парсер):
return ;
'0'.concat(value.getDate()).slice(-2).
concat('.').
concat('0'.concat(value.getDay() + 1).slice(-2)).
concat('.').
concat(value.getFullYear()).
concat(' ').
concat('0'.concat(value.getHours()).slice(-2)).
concat(':').
concat('0'.concat(value.getMinutes()).slice(-2)).
concat(':').
concat('0'.concat(value.getSeconds()).slice(-2));

Нельзя после return перенос на другую строку ставить...

Autosof 04.09.2008 18:54

Да.....

Нужно срочно поменять название темы с "непонятное поведение javascript" на "жесткое поведение javascript"...

Странно как это парсер "упустил" возможность в строке
var str =

присвоить значение "undefined" этой переменной...

Боюсь даже думать чего ещё можно от него ожидать :rolleyes:

ZoNT 04.09.2008 18:55

потому что он так поступает только с return.

Autosof 04.09.2008 19:00

Ну вообщем тему можно закрывать. Всё понятно. Спасибо.

Так работает:
date_to_string = function (value) {

    return '0'.concat(value.getDate()).slice(-2).
    concat('.').
    concat('0'.concat(value.getDay() + 1).slice(-2)).
    concat('.').
    concat(value.getFullYear()).
    concat(' ').
    concat('0'.concat(value.getHours()).slice(-2)).
    concat(':').
    concat('0'.concat(value.getMinutes()).slice(-2)).
    concat(':').
    concat('0'.concat(value.getSeconds()).slice(-2))
}


Конец рабочего дня дает о себе знать... ;)


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