':'(冒号)在JavaScript中有什么作用?

Mic*_*cah 170 javascript

我正在学习JavaScript,在浏览jQuery库时,我看到:(冒号)被大量使用.这在JavaScript中用于什么?

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };
Run Code Online (Sandbox Code Playgroud)

yfe*_*lum 234

var o = {
    r: 'some value',
    t: 'some other value'
};
Run Code Online (Sandbox Code Playgroud)

在功能上等同于

var o = new Object();
o.r = 'some value';
o.t = 'some other value';
Run Code Online (Sandbox Code Playgroud)

  • 所以类似于C#对象初始化器语法.谢谢! (13认同)

Bre*_*ton 86

而且,冒号可用于标记语句.例如

var i = 100, j = 100;
outerloop:
while(i>0) {
  while(j>0) {
   j++

   if(j>50) {
     break outerloop;
   }
  }
i++

}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到Spagetti代码:) (3认同)
  • JS 标签的 MDN 参考页面:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label (2认同)

Bre*_*ton 66

你们忘记了冒号也用在三元运算符中(虽然我不知道jquery是否将它用于此目的).

三元运算符是if/then语句的表达式(表达式返回值).它的使用方式如下:

var result = (condition) ? (value1) : (value2) ;
Run Code Online (Sandbox Code Playgroud)

三元运算符也可以用于产生副作用,就像if/then一样,但这是非常糟糕的做法.

  • 是的,我的意思是.我应该远离互联网,真的,如果我要肆无忌惮地错误识别这样的编程概念. (13认同)
  • AKA"三元运营商".请注意,OP严格询问对象文字的情况.如果我们要超越OP要求的范围,冒号也会用在标签上. (2认同)

Dan*_*ert 41

':'基本上是键值对的分隔符.在您的示例中,它是一个Javascript Object Literal表示法.

在javascript中,对象定义为使用冒号分隔属性的标识符及其值,以便您可以拥有以下内容:

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

var o =  { 
    property1 : 125,
    property2 : "something",
    method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

alert(o.property1); // Will display "125"
Run Code Online (Sandbox Code Playgroud)

其中一个子集也称为JSON(Javascript Object Notation),它在AJAX调用中很有用,因为它紧凑且可以快速解析服务器端语言,Javascript可以轻松地将JSON字符串反序列化为对象.

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');
Run Code Online (Sandbox Code Playgroud)

如果密钥包含某种特殊字符或空格,您也可以将密钥放在引号内,但我不建议这样做,因为它只会让事情更难处理.

请记住,JavaScript语言中的JavaScript Object Literal Notation与消息传递的JSON标准不同.2之间的主要区别在于函数和构造函数不是JSON标准的一部分,但在JS对象文字中是允许的.

  • 当我读到您的回复时,我以为我会投票,但之后您说"它也被称为JSON".对象文字和JSON绝对不是*相同的东西,实际上你提到JSON之前的例子都不是有效的JSON. (2认同)

ban*_*ndi 17

它是对象文字语法的一部分.基本格式是:

var obj = { field_name: "field value", other_field: 42 };
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下方法访问这些值

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"
Run Code Online (Sandbox Code Playgroud)

您甚至可以将函数作为值,基本上为您提供对象的方法:

obj['func'] = function(a) { return 5 + a;};
obj.func(4);  // -> 9
Run Code Online (Sandbox Code Playgroud)


use*_*627 13

它可用于列出变量中的对象.此外,它在if句子的简写中使用了一点:

var something = {face: 'hello',man: 'hey',go: 'sup'};
Run Code Online (Sandbox Code Playgroud)

并且这样称呼它

alert(something.man);
Run Code Online (Sandbox Code Playgroud)

if句子:

function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}
Run Code Online (Sandbox Code Playgroud)


小智 10

我们不要忘记switch语句,其中在每个"case"之后使用冒号.


sch*_*gel 10

JavaScript 中冒号的另一种用法是重命名变量,即:

const person = { 
    nickNameThatIUseOnStackOverflow: "schlingel",
    age: 30,
    firstName: "John"
};
let { nickNameThatIUseOnStackOverflow: nick } = person; // I take nickNameThatIUseOnStackOverflow but want to refer it as "nick" from now on.
nick = "schling";
Run Code Online (Sandbox Code Playgroud)

如果您使用第三方库,该库返回的值具有您想要在代码中重命名的尴尬/长变量名称,则这非常有用。

  • 哇!你怎么知道这个? (3认同)

Leo*_*our 8

这些通常是在JavaScript中使用冒号':'的情况

1-声明和初始化对象

var Car = {model:"2015", color:"blue"}; //car object with model and color properties
Run Code Online (Sandbox Code Playgroud)

2-设置标签(不推荐使用,因为它会导致复杂的控制结构和Spaghetti代码)

List: 
while(counter < 50)
{
     userInput += userInput;
     counter++;
     if(userInput > 10000)
     {
          break List;
     }
}
Run Code Online (Sandbox Code Playgroud)

3-在Switch语句中

switch (new Date().getDay()) {
    case 6:
        text = "Today is Saturday";
        break; 
    case 0:
        text = "Today is Sunday";
        break; 
    default: 
        text = "Looking forward to the Weekend";
}
Run Code Online (Sandbox Code Playgroud)

4-在三元运算符中

document.getElementById("demo").innerHTML = age>18? "True" : "False";
Run Code Online (Sandbox Code Playgroud)

  • 单个冒号也可以代替“||”用于短路评估。示例:`var a = false, b = a || '默认值';` 等价于 `var a = false, b = a : '默认值';` (3认同)

JW.*_*JW. 7

这是JSON或JavaScript Object Notation.这是描述对象或哈希映射的快速方法.冒号之前的东西是属性名称,冒号之后的东西是它的值.所以在这个例子中,有一个属性"r",其值是变量r中的任何值.同样的t.

  • 要迂腐,不,这不是"JSON".它_looks_喜欢JSON.它是JavaScript的原生对象文字语法,可以直接出现在代码中.另一方面,JSON是数据序列化/交换格式.JSON只有当它是"空中"时才是JSON,即在传输过程中或者当它尚未解析为真实对象时. (12认同)
  • JSON只是JavaScript对象初始化语法的一个子集.'{a:k()}'其中k是一个函数不是JSON,但它是完美的JavaScript对象初始化语法. (3认同)
  • 为Ates Goral +1,但请注意,给出的示例甚至看起来不像JSON:名称必须是双引号才能成为有效的JSON语法. (3认同)

You*_* Nj 5

我不久前犯的一个愚蠢错误可能会对某些人有所帮助。

请记住,如果您在此类事件中使用“:”,则该值不会改变

var ondrag = (function(event, ui) {
            ...

            nub0x: event.target.offsetLeft + event.target.clientWidth/2;
            nub0y = event.target.offsetTop + event.target.clientHeight/2;

            ...
        });
Run Code Online (Sandbox Code Playgroud)

因此“nub0x”将使用发生的第一个事件进行初始化,并且永远不会更改其值。但“nub0y”将在接下来的事件中发生变化。