在javavascript prompt(),document.write()和console.log()中使用“+”(加号)和“,”(逗号)

时间:2016-11-20 03:21:06

标签: javascript

我对以下如何解释JavaScript感到困惑:

1

n = prompt("Please enter a number to calculate factorial " + "Now!", "Delete this first!" + " ...And this :(", "Hello");

我假设逗号“,”用于分隔发送给函数的参数,而prompt()接受一(1)或两(2)个参数并丢弃第三个:“Hello”?< / p>

2

How are "," commas interpreted in the document.write() function and the console.log() function. 

他们习惯分开论点吗?这些函数可以使用无数个参数吗?

3

在这些例子中:

console.log("1.) expression " , (1<2).toString() + 3>2);

console.log("2.) expression " , (3<2).toString() , 3>2);

console.log("3.) expression " + (3>2).toString() + 3>2);

console.log("4.) expression " , 3<2);

console.log("5.) expression " + 3<2);

console.log("6.) expression " + n + 3<2);

输出:

1.) expression  false

2.) expression  false true

3.) false

4.) expression  false

5.) false

6.) false

我猜测“+”被视为表达式的一部分而不是在遇到另一个运算符时连接字符串?

在第一个表达式中,(1<2).toString()添加了3?什么样的类型和它转换成什么价值?为什么评估为false

我可以假设document.write()console.log()函数对待“,”(逗号)的方式与其他函数不同吗?

2 个答案:

答案 0 :(得分:0)

  1. 关于提示
  2.   

    我假设逗号“,”用于分隔发送给函数的参数,而prompt()接受一(1)或两(2)个参数并丢弃第三个:“Hello”?< / p>

    prompt有两个参数。任何额外内容都会被忽略,因为JavaScript中的所有函数都不使用arguments object或rest参数来更改可变数量的参数的行为。

    function x ( a ) { return a; }
    x( 'this', 'is', 'perfectly' ,'valid' );
    
    1. 关于document.write和console.log
    2.   

      他们习惯分开论点吗?这些函数可以使用无数个参数吗?

      是的,函数调用中的逗号始终用于分隔参数。据我所知,这两个函数都使用了可变数量的参数,但它可能是特定于实现的。

      1. 我会添加一些括号来帮助您理解这些行的输出:
      2. console.log("1.) expression " , ( (1<2).toString() + 3 ) > 2 );
        console.log("2.) expression " , (3<2).toString() , 3>2);
        console.log( ( "3.) expression " + (3>2).toString() + 3 ) > 2);
        console.log("4.) expression " , 3<2);
        console.log( ( "5.) expression " + 3 ) <2);
        console.log( ( "6.) expression " + n + 3 ) <2);
        
          

        我可以假设document.write()和console.log()函数以不同于其他函数的方式处理“,”(逗号)吗?

        你认为这是错误的,但我不会试图阻止你。

答案 1 :(得分:0)

免责声明 我是通过 我的 对Javascript的理解及其工作原理撰写的。我从来没有正式教过Javascript,我没有在大学里学过这门语言,而且我从未看过这个。如果错误,请理解这是我的(工作)知识 Javascript的工作原理。

功能

你的问题还有很多话题要谈。首要的是,这些功能中的每一个在它们需要或将接受的内容上是不同的。 Prompt()只接受两个参数:它输出的文本和&#34;默认文本&#34; (最初在提示中显示的文本)。你可以输入更多的参数,但函数没有被编码以对它们做任何事情,所以没有任何反应。

console.log()函数,就像document.write()函数一样,采用变量(和理论上无限的)参数。评估每个参数并将其传递给这些函数。 Console.logdocument.write都会将这些表达式简单地输出到各自的位置(Javascript控制台或文档对象)

+运算符

这是一个很难回答的问题,而且完全是我自己对Javascript的理解。 Javascript中的+运算符是双重功能。它既可以作为加法的数学运算,也可以作为非整数的concactenator。

我的意思是这一长串的单词是这样的:Javascript,当它遇到一个带有+的表达式时,最好猜测它对它的期望是什么。如果两个项都是数字(整数,浮点数,双精度数,布尔值),则它决定要将这两个项加在一起。如果其中任何一个 一个数字,那么它决定你要将这两个东西连在一起。这并不总是正确的,有时它甚至会困扰我们最好的人。

你的控制台测试在幕后的javascript世界中看起来有点像这样。

console.log("1.) expression ", (1 < 2).toString() + 3 > 2);
//gets evaluated to :
//"1.) expression ", "true"+3 > 2)
//= "1.) expression", "true3" > 2) <- can't compare these two logically, so we get false
//= "1.) expression", false <- is finally passed to function
console.log("2.) expression ", (3 < 2).toString(), 3 > 2);
//"2.) expression ", "false" , true
console.log("3.) expression " + (3 > 2).toString() + 3 > 2);
//"3.) expression " + "false" + 3 > 2
//="3.) expression false" + 3 > 2
//="3.) expression false3" > 2 <- same thing, can't logically compare, so false.
console.log("4.) expression ", 3 < 2);
//"4.) expression ", false
console.log("5.) expression " + 3 < 2);
//"5.) expression 3" < 2 <- can't logically compare
//false
console.log("6.) expression " + n + 3 < 2);
//Same thing as #4, but not with an extra variable that gets combined to the string.

我认为这就像操作顺序,首先优先考虑分组表达式然后从左到右。

希望这有帮助。