6

请考虑下面的代码示例,并专注于变量分配。由于我从未在 C++ 中见过这种形式,以下是什么意思:新的 XMLHttpRequest 中“上传”。

我需要很好地解释以下陈述的含义:progress: "upload" in new XMLHttpRequest。特别是,in不在 C++ 中。那in应该做什么?

tests = {
  filereader: typeof FileReader != 'undefined',
  dnd: 'draggable' in document.createElement('span'),
  formdata: !!window.FormData,
  progress: "upload" in new XMLHttpRequest
};

谢谢你。

4

5 回答 5

6

第 11.8.7 章 -in操作员

返回使用参数ToString(lval)调用rval的[[HasProperty]]内部方法的结果。

意思就是

(lval in rval)

rval是一个对象并且它有一个名为 的属性时为真String(lval)

in也用于for (... in ...)循环,但这只是类似的语法,而不是使用此运算符。


"upload" in new XMLHttpRequest

这是在询问“XMLHttpRequest实例是否有一个名为‘upload’的属性?” 它有效地检查此浏览器是否具有可能并非所有浏览器都存在的特定功能。

upload特别是在XMLHttpRequest Level 2中指定为支持某些事件处理程序的对象,以让您监控上传的进度:

interface XMLHttpRequestEventTarget : EventTarget {
  // event handlers
  [TreatNonCallableAsNull] attribute Function? onloadstart;
  [TreatNonCallableAsNull] attribute Function? onprogress;
  [TreatNonCallableAsNull] attribute Function? onabort;
  [TreatNonCallableAsNull] attribute Function? onerror;
  [TreatNonCallableAsNull] attribute Function? onload;
  [TreatNonCallableAsNull] attribute Function? ontimeout;
  [TreatNonCallableAsNull] attribute Function? onloadend;
};
于 2012-09-23T03:03:32.070 回答
3

该语句'draggable' in document.createElement('span')返回一个布尔值。它检查元素(在本例中为跨度)是否具有draggable属性,如果有true则返回,如果没有则返回值为 false。没有什么了。

如果你看到这样的代码:

for (varName in obj)
{
    //some stuff
}

obj您真正看到的只是对象 ( )的可枚举属性的循环。假设一个看起来像这样的对象:

var obj = {foo:'bar',non:'sense'};

ThenvarName将等于foo, then nonetc... 换句话说:“x in y语句”的主要目标是检查对象的可枚举(公共)属性是否存在

于 2012-09-23T02:55:57.363 回答
2
  • typeof FileReader != 'undefined'
    • 如果存在名为FileReader的对象,则为true ,否则为false

  • 'draggable' in document.createElement('span')
    • 如果<span>元素允许可拖动的属性/方法,则为true,否则为false

  • !!window.FormData
    • 如果窗口对象具有名称为FormData的属性/方法,则为true ,否则为false

  • "upload" in new XMLHttpRequest
    • 如果XMLHttpRequest对象具有名称为upload的属性/方法,则为true ,否则为false
于 2012-09-23T03:11:48.270 回答
1

'x' in y如果 "y" 包含名为 "x" 的属性,将返回 true

顺便说一句,您不应该期望 Javascript 和 C++ 如此相似。它们完全不同。

于 2012-09-23T02:55:08.547 回答
1
tests = {
  filereader: typeof FileReader != 'undefined',
  dnd: 'draggable' in document.createElement('span'),// Basically checks the draggable property of span
  formdata: !!window.FormData,
  progress: "upload" in new XMLHttpRequest// checking for the upload property of XMLHttpRequest/, you can add an eventlistner to check the progress event. 
};

就“in”而言,它只不过是检查元素是否存在。它返回一个布尔值

于 2012-09-23T03:06:45.343 回答