什么是';:';(冒号)用JavaScript做什么?

什么是';:';(冒号)用JavaScript做什么?,javascript,Javascript,我正在学习JavaScript,在浏览jQuery库时,我看到大量使用了:(冒号)。这在JavaScript中用于什么 // Return an array of filtered elements (r) // and the modified expression string (t) return { r: r, t: t }; 在功能上等同于 var o = new Object(); o.r = 'some value'; o.t = 'some other value';

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

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };
在功能上等同于

var o = new Object();
o.r = 'some value';
o.t = 'some other value';

这就是JSON或JavaScript对象表示法。这是一种描述对象或哈希映射的快速方法。冒号前面的是属性名,冒号后面的是属性值。在这个例子中,有一个属性“r”,它的值是变量r中的任何值。与t相同。

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

var obj = { field_name: "field value", other_field: 42 };
然后,您可以通过以下方式访问这些值:

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"
您甚至可以将函数作为值,基本上为您提供对象的方法:

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

“:”基本上是键值对的分隔符。在您的示例中,它是一个Javascript对象文字符号

在javascript中,对象是用冒号定义的,冒号分隔属性的标识符及其值,因此可以具有以下内容:

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};
然后像这样使用它:

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

alert(o.property1); // Will display "125"
其中的一个子集也称为JSON(Javascript对象表示法),它在AJAX调用中非常有用,因为它使用服务器端语言进行紧凑、快速的解析,并且Javascript可以轻松地将JSON字符串反序列化为对象

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');
如果密钥包含某种特殊字符或空格,也可以将其放在引号内,但我不建议这样做,因为这样做只会使事情更难处理


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

你们忘记了冒号也用于三元运算符(尽管我不知道jquery是否为此使用它)

三元运算符是if/then语句的表达式形式(表达式返回值)。它是这样使用的:

var result = (condition) ? (value1) : (value2) ;

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

此外,冒号也可以用于标记语句。比如说

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

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

}

不要忘记switch语句,其中冒号在每个“case”之后使用。

它可以用于列出变量中的对象。此外,它在if语句的速记中也有少量使用:

var something = {face: 'hello',man: 'hey',go: 'sup'};
function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}
这样称呼它

alert(something.man);
还有如果一句话:

var something = {face: 'hello',man: 'hey',go: 'sup'};
function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}

这些通常是JavaScript中使用冒号“:”的场景

1-声明和初始化对象

var Car = {model:"2015", color:"blue"}; //car object with model and color properties
2-设置标签(不推荐,因为这会导致复杂的控制结构和意大利面代码)

四元三值算子

document.getElementById("demo").innerHTML = age>18? "True" : "False";

我刚才犯的一个愚蠢的错误可能会帮助一些人

请记住,如果使用“:”在这样的事件中,值不会更改

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

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

            ...
        });

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

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";

如果您使用第三方库,该库返回的值包含要在代码中重命名的笨拙/长变量名,则此功能非常有用。

与C#object initializer语法非常相似。谢谢如果没有封闭对象呢?@FranciscI.B如果我不得不猜测,我想那是TypeScript,它是JavaScript的超集。它声明了一个类,带有一个名为xMin的变量,其类型为float。JSON只是JavaScript对象初始化语法的一个子集{a:k()}'其中k是一个函数,它不是JSON,但它是非常好的JavaScript对象初始化语法。它看起来像JSON。它是JavaScript固有的对象文字语法,可以直接出现在代码中。另一方面,JSON是一种数据序列化/交换格式。JSON只有在“机载”的情况下才是JSON,即在传输过程中或尚未解析为真实对象时。Ates Goral为+1,但请注意,给出的示例甚至不像JSON:名称必须在双引号中才能成为有效的JSON语法。又称“三元运算符”。请注意,OP严格询问的是对象文字大小写。如果我们想超越OP的要求,冒号也可以用在标签上。是的,我是这么说的。我不应该上网,真的,如果我要到处公然错误识别这样的编程概念。看到它被用于标签和其他任何东西都会很棒,所以使用@AtesGoral永远不会混淆,因为我现在还在用谷歌搜索它们。也许列出:在Javascript中不使用的东西会更容易。当我阅读你的回复时,我本以为我会投票支持它,但后来你说“它也被称为JSON”。对象文本和JSON绝对不是一回事,事实上,在提到JSON之前,您的示例不是有效的JSON。@nnnn这两个文本之间的区别非常细微,但仍然很重要。我已经更新了我的答案,使之更加具体。我看到了更新。美好的请注意,JSON要求键名必须用引号括起来。为什么要两次提到所有这些?当你说“然后像这样使用它”时,很好,因为它给了我一个搜索和查找更多信息的术语。我发现了这一点,告诉你,实际上这里发生的是,你在陈述之前使用了一个标签。未进行赋值,但语句
event.target.offsetLeft+event.target.clientWidth/2都会运行,但从不将值赋给
nub0x
实际上这是一个计算,并且
被视为一个
|
。因此,
event.target.offsetLeft+event.target.clientWidth/2numb0x
等于false时,code>将仅触发。goto不能伪装:您只需
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";