2011-01-28 3 views
3

Следующий цикл работ:используя строку как для выражения цикла и состояния

<html> 
<body> 
<script type="text/javascript"> 
var i=0; 
for (i=0;i<=5;i++) 
{ 
document.write("The number is " + i); 
document.write("<br />"); 
} 
</script> 
</body> 
</html> 

Но следующий не будет:

<html> 
<body> 
<script type="text/javascript"> 
var i=0; 
var x="i=0;i<=5;i++" 
for (x) 
{ 
document.write("The number is " + i); 
document.write("<br />"); 
} 
</script> 
</body> 
</html> 

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

Позвольте мне представить свой образец Google гаджет:

<?xml version="1.0" encoding="UTF-8" ?> 
<Module> 
<ModulePrefs title="Sample Gadget" /> 
<UserPref name="order" 
      display_name="Results Order" 
      default_value="i = 0; i <= 5; i++" datatype="enum"> 
<EnumValue value="i = 0; i <= 5; i++" display_value="Ascending"/> 
<EnumValue value="i = 5; i >= 0; i--" display_value="Descending"/> 
</UserPref> 
<Content type="html"><![CDATA[ 
<script type="text/javascript"> 
var i=0; 
for (__UP_order__) 
{ 
document.write("The number is " + i); 
document.write("<br />"); 
} 

</script> 
]]></Content> 
</Module> 

Это не работает из-тегов <> (они не поддерживаются), и именно поэтому я попытался определить переменную для EnumValue стоимость.

+1

Почему вы хотите это сделать? – ChaosPandion

+1

что-то мешает вам использовать обычный синтаксис, как в первой версии? почему вы хотите использовать версию 2? как вы даже пришли к выводу, что такой синтаксис является приемлемым? – SilentGhost

+0

Я только что редактировал свой вопрос. – Mori

ответ

5

Когда вы скажете var x="i=0;i<=5;i++", вы создаете текстовую строку. Это не интерпретируется JavaScript, как вы ожидаете.

Существует определенная разница между операторами и текстовыми строками. Несмотря на то, что он выглядит как один и тот же, он выглядит интерпретатором как текстовая строка, например "hello" или "sdflkjsdflkjsdflj". JavaScript не ожидает текстовой строки как параметры цикла, она ожидает three loop control parameters/statements. Если вы хотите иметь цикл, который начинается и заканчивается в различных точках, сделать что-то вроде этого ...

var i=0; 
var start=0; //you can change the start position by changing this 
var end=5; //and you can change the end also 

for (i=start;i<=end;i++) 
{ 
document.write("The number is " + i); 
document.write("<br />"); 
} 
+0

Ха-ха. Просто понял, что ссылка, которую я опубликовал, на самом деле является источником этого кода. :) –

+0

Я только что редактировал мой вопрос. – Mori

0

Поскольку х является строкой, и вы не можете использовать для постановки со строкой внутри. Если вам нужно изменить верхнюю границу оператора for, вы можете использовать переменную вместо номера исправления 5.

4

Вкратце: вы вводите код в заблуждение с данными. "i=0;i<=5;i++" - это данные (фрагмент текста, строка). Но при написании цикла for вы должны написать инициализацию, условие и шаг в качестве кода - вы не можете передать текст, который выглядит как код, который вы там пишете. (На самом деле, вы не хотите - что должно произойти, когда данные не являются как действительный код? Не говоря уже о необходимости - см. El Ronnoco's)

+0

Я думаю, что ваши заявления о различиях между * кодом * и * данными * очень проницательны. Хотя Лисп приходит на ум. – ChaosPandion

+0

Боковое примечание: я жду, когда пользователи lisp придут и объяснят, как в lisp, эти два одинаковы (что, конечно, только половина правды: многие совершенно полезные программы не будут использовать его вне макросов). Пожалуйста, не разочаровывай меня :) – delnan