Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка существования параметра (https://javascript.ru/forum/misc/58011-proverka-sushhestvovaniya-parametra.html)

rolleyes 30.08.2015 18:14

Проверка существования параметра
 
Здравствуйте.

Есть проблема.. у меня есть функция которая вызывается как с параметрами так и без. Чаще она вызывается без них, он когда я добавляю в нее параметры, она их прописывает в объект, для которого она вызывается.

Проверка осуществляется следующим образом:

myObj.prototype.moveTo = function(moveToX, moveToY, moveToD){

if(moveToX && moveToY && moveToD){

			this.moveToX = moveToX;
			this.moveToY = moveToY;
			this.moveToD = moveToD;
			this.moveToT = 0;
			this.moveToStatus = true;
			this.visible = true;
		}


И тут возникает проблема... если в один из параметров я передаю ноль... то при проверке ноль воспринимается как false... Собственно вопросов два:

1. Как передать 0 как число и проверять его существование. И если параметр существует, в независимости от его содержания и т.д...
2. Есть ли способ по друому сделать проверку на наличие параметров передаваемых в функцию и если они есть и в полном составе, то тогда их присваивать вызывающему их объекту...

сорри за сумбур, я совсем нуб...

заранее спасибо за ответы!

caetus 30.08.2015 18:25

можешь проверить на число !isNaN или Number() если там передаешь только числа или еще сравнить с undefined

рони 30.08.2015 18:39

rolleyes,
//obj = {moveToX : ...}
myObj.prototype.moveTo = function(obj){

if(obj){
            for(var k in obj) this[k]=obj[k]
		    this.moveToT = 0;
			this.moveToStatus = true;
			this.visible = true;
		}

rolleyes 30.08.2015 18:43

caetus, сравнить с undefiened! Вот же мое решение! Спасибо!

рони, var k in obj: вспомнил выразительный джаваскрипт! Круто, тоже попробую!

Спасибо большое!

forwardonly2015 31.08.2015 22:35

rolleyes,
судя по логике твоей функции ты не проверяешь тип передаваемых параметров, лишь только их наличие, соответственно, тебе подойдет просто arguments.length

forwardonly2015 31.08.2015 22:45

рони,
Не совсем понятно, проверку чего решает Ваш вариант. ТС в своем примере проверяет наличие 3-х параметров, Ваш пример допустит в качестве параметра {a: 1} и даже, например, 1, true, etc. Второе, Вы слишком легкомысленно используете for in, в Вашем случае в target-объект будут скопированы все поля, включая всю цепочку родителей. Надо ли это ТС'у? хз.

рони 31.08.2015 23:01

forwardonly2015,
скучно с вами, вечно вы с конями из вакуума приходите. уж и ТС хорошо и пример просто показывает вариант решения, а вам василий иванович, лишь бы до фонарного столба доколупатся.
Метод hasOwnProperty это на всякий случай, если вы вместо трёх свойств фигню захотите передать.

forwardonly2015 31.08.2015 23:13

рони,
Это, в данном случае не кони. У ТС'а, насколько я понял, был вопрос о проверке параметров, а Вы его просветили об ином способе передачи. То есть Ваш ответ, помимо всего прочего, не имеет никакого отношения к вопросу. Так что, не скучайте:)

рони 31.08.2015 23:19

Цитата:

Сообщение от forwardonly2015
То есть Ваш ответ, помимо всего прочего, не имеет никакого отношения к вопросу.

ваш бы кругозор, да в мирных целях ...

forwardonly2015 31.08.2015 23:42

Цитата:

Сообщение от рони
если вы вместо трёх свойств фигню захотите передать.

И, кстати, Вы немного не о том. Слово "хотите" тут слабо подходит. В вашем варианте туда будет скопировано все из корневого объекта, это как минимум (исключая неперечисляемые слоты), в том числе и сам moveTo, хотите Вы того, или не хотите.

рони 31.08.2015 23:54

forwardonly2015,
не понимаю о чём вы?

forwardonly2015 01.09.2015 00:06

Object.prototype.foo=function(obj){for(var i in obj) this[i]=obj[i]}
obj={a: 1}

testObj={}
testObj.foo(obj)
alert(testObj.hasOwnProperty("foo"))

рони 01.09.2015 00:33

forwardonly2015,
у всех обьектов будет свойство foo и в чём соль?

forwardonly2015 01.09.2015 00:45

Цитата:

Сообщение от рони
соль?

LOL. Соль в том, что они должны его наследовать[делегированием] а не содержать в себе. Вам надо поменьше увлекаться жекверями. Вопросы Ваши детсадовского уровня, если честно.

рони 01.09.2015 01:07

forwardonly2015,
не понимаю.

рони 01.09.2015 01:21

Цитата:

Сообщение от forwardonly2015
они должны его наследовать[делегированием]

это я совсем не понимаю -- передали три параметра обьектом - есть обьект меняем свойства, можно даже if(obj) убрать, причём тут прототипы, наследование делегирование?
зачем в обьект с параметрами совать лишнее, тем более за ТС, не нравится предложите лучше, зачем усложнять простое?

forwardonly2015 01.09.2015 01:22

рони,
Насколько я понял, Вы вообще не понимаете ООП в JS. Это понятно, поскольку годной литературы по JS мало, если не сказать отсутствует. Могу посоветовать почитать что-нибудь по Self, Io, отчасти Lua, еще поможет Smalltalk и Ruby, хотя в последних классы, не совсем то, но их с JS роднит динамика. А с ходу Вы это не поймете все равно, бесполезно Вам что-либо объяснять тут.

forwardonly2015 01.09.2015 01:28

Цитата:

Сообщение от рони (Сообщение 386760)
это я совсем не понимаю -- передали три параметра обьектом - есть обьект меняем свойства, можно даже if(obj) убрать, причём тут прототипы, наследование делегирование?
зачем в обьект с параметрами совать лишнее, тем более за ТС, не нравится предложите лучше, зачем усложнять простое?

Я вообще не распарсил, что Вы тут сказали, но для такого случая как у Вас показан(если это кому то нужно) надо использовать конструкторы.

рони 01.09.2015 01:29

forwardonly2015,
спасибо за совет, но этоже бесполезно :)

рони 01.09.2015 01:30

Цитата:

Сообщение от forwardonly2015
надо использовать конструкторы

абалдеть ... ещё один зверь, у вас там зоопарк что-ли?

forwardonly2015 01.09.2015 01:30

Цитата:

Сообщение от рони
но этоже бесполезно

Что именно?

рони 01.09.2015 01:39

forwardonly2015,
сложно у меня с пониманием :) вас например не понимаю, js не понимаю, а куды с подводной лодки денешься, к утру надо чтоб работало :lol:

forwardonly2015 01.09.2015 01:47

рони,
Смотря что работало бы. Если ваши задачи заключаются в рисовании рисулек и числодрочерстве, в вашей лодке это не нужно. Это потребуется в той лодке, где люди занимаются разработкой и проектированием. Каждый инструмент для своей задачи. Гвозди микроскопом никто забивать не принуждает

рони 01.09.2015 02:11

forwardonly2015,
откуда столько злости к голоте?

forwardonly2015 01.09.2015 03:27

рони,
Никакой злости нет, я сказал лишь о нужности того или иного подхода в контексте решения той или иной задачи

tsigel 01.09.2015 09:21

У меня возникает ощущение что foo вернулся.

рони 01.09.2015 11:53

Цитата:

Сообщение от tsigel
У меня возникает ощущение что foo вернулся.

милого узнаю по походке и коду без var но с with.

forwardonly2015 01.09.2015 12:09

рони,
Вы задели меня за живое, сильно комплексую из-за этого. Одно утешение, я не бегаю вокруг кода с бубнами, в отличие от некоторох идейно-религиозных варистов.

рони 01.09.2015 12:49

forwardonly2015,
Держи хвост морковкой!


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