Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在为画布声明变量时添加[0]?_Javascript_Jquery_Canvas - Fatal编程技术网

Javascript 为什么在为画布声明变量时添加[0]?

Javascript 为什么在为画布声明变量时添加[0]?,javascript,jquery,canvas,Javascript,Jquery,Canvas,在此代码中: var canvas = $("#myCanvas")[0]; var ctx = canvas.getContext("2d"); 为什么我们必须添加[0]来标识画布?这让我有点困惑,因为当有多个元素具有相同的名称,并且我们需要处理一个特定的元素时,通常会添加[n]。但是id只能引用一个唯一的元素。此语法用于从jQuery对象检索基础canvas DomeElement,以便可以使用getContext()方法(jQuery对象没有该方法) $('#myCanvas')

在此代码中:

var canvas = $("#myCanvas")[0];
var ctx = canvas.getContext("2d");

为什么我们必须添加
[0]
来标识画布?这让我有点困惑,因为当有多个元素具有相同的名称,并且我们需要处理一个特定的元素时,通常会添加
[n]
。但是id只能引用一个唯一的元素。

此语法用于从jQuery对象检索基础canvas DomeElement,以便可以使用
getContext()
方法(jQuery对象没有该方法)

$('#myCanvas')                      // = canvas DOMElement wrapped in a jQuery object
$('#myCanvas')[0]                   // = canvas DOMElement
document.getElementById('myCanvas') // = canvas DOMElement
另见:

jQuery始终返回类似数组的对象,即使使用(唯一)id作为选择器也是如此


在您的例子中,
[0]
将返回第一个(也是唯一一个)实际元素。

jQuery选择器可以返回多个对象,因此它们总是返回类似于数组的内容。当然,最好只使用
canvas=document.getElementById('myCanvas')
。。。或者
document.querySelector(“#myCanvas”)
如果需要更复杂的选择器。因为要使用像getContext()这样的javascript方法,需要返回实际的dom元素,而不是jQuery数组。例如,执行$(“body”).innerHTML将为您提供未定义但$(“body”)[0]。innerHTML将返回body的内容。@Oriol-是的,我知道。这是一个在大脑活动之前打字太快的例子。谢谢你指出我的错误