这个问题非常明显.我不明白返回在以下代码中做了什么:
<form onsubmit="return somefunction()">
Run Code Online (Sandbox Code Playgroud) JavaScript中的道格拉斯·克罗克福德(Douglas Crockford)表示"转变通常比流行音乐慢得多".jsPerf 证实了这一点.有谁知道为什么会这样?从一个不成熟的角度来看,他们似乎做了几乎相同的事情.
根据MDC,ECMA-262,第5版将forEach的实施表示为:
if (!Array.prototype.forEach)
{
Array.prototype.forEach = function(fun /*, thisp */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in t)
fun.call(thisp, t[i], i, t);
}
};
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我"var t = Object(this)"这行是做什么的?对象(这个)与普通的不同之处是什么?在这做什么工作是有区别的?
所以我试图定义一个类似于document.getElementById的函数g().以下工作正常:
var g = function(id){return document.getElementById(id)};
Run Code Online (Sandbox Code Playgroud)
但为什么这个更直接的代码不起作用呢?
var g = document.getElementById;
Run Code Online (Sandbox Code Playgroud) 以下是将字符串视为对象的两个原因.首先,您可以通过以下方式创建字符串:
var mystring = new String("asdf");
Run Code Online (Sandbox Code Playgroud)
我的印象是new运算符后面的构造函数必须返回一个对象.其次,字符串似乎有属性和方法.例如:
mystring.toUpperCase();
Run Code Online (Sandbox Code Playgroud)
但是,如果字符串是对象,那么我们期望像下面这样的东西起作用:
function string_constructor() {
return "asdf";
}
var mystring = new string_constructor();
Run Code Online (Sandbox Code Playgroud)
但它没有,我被告知它不是因为字符串不是对象.字符串对象是否也是如此?无论哪种方式,我怎样才能理解我列出的所有内容?
如果参数只是一个具有length属性的对象,那么为什么它看起来与其他非数组对象的行为不同,例如Array.prototype.slice.
例如,以下代码首先警告"未定义",然后警告"foo".为什么这些不同?
(function(a){
var myobj = {0 : "foo"};
var myobjarray = Array.prototype.slice.call(myobj);
var argumentsarray = Array.prototype.slice.call(arguments);
alert(myobjarray.shift());
alert(argumentsarray.shift());
})("foo");
Run Code Online (Sandbox Code Playgroud) 我想知道答案可以帮助我概念化浏览器存储的cookie与通过DOM提供的document.cookie之间的关系.
因此,以下代码警告错误两次:
window.onload = function(){
alert(window.myframe.myarray instanceof Array);
alert(window.myframe.myarray.constructor === Array);
}
Run Code Online (Sandbox Code Playgroud)
名为"myframe"的页面中有一个iframe,其中包含一个名为"myarray"的数组.如果将数组移动到主页面(而不是iframe),则代码会按预期警告两次.有人知道为什么吗?
因此,使用下面的代码,当我更改条形边距时,foo的位置会发生变化.但这只发生在身体相对定位时.如果我静态定位身体,那么foo的位置不再取决于条形边缘.谁能告诉我发生了什么事?
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
* {
margin:0;
}
body {
position:relative;
}
#foo {
position:absolute;
top:50px;
left:50px;
}
#bar {
margin:100px;
}
</style>
</head>
<body>
<div id="foo">asdf</div>
<div id="bar">asdf</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 链接到我的网站会将我的网站保留在一个框架中,因此我在页面中添加了以下JavaScript:
if (window.top.location != window.location) {
window.top.location = window.location
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我通过违规网站访问我的网站,我的网站成功突破了框架.但后退按钮打破了!后退按钮将用户发送到我网站的框架版本,该版本会立即再次爆发,让他回到他试图离开的地方!有没有一种简单的方法来解决这个问题?