相关疑难解决方法(0)

JavaScript保证是单线程的吗?

众所周知,JavaScript在所有现代浏览器实现中都是单线程的,但是它是在任何标准中指定的还是仅仅是传统的?假设JavaScript始终是单线程的,这是完全安全的吗?

javascript concurrency

588
推荐指数
8
解决办法
12万
查看次数

如何在JavaScript中"正确"创建自定义对象?

我想知道创建一个具有属性和方法的JavaScript对象的最佳方法是什么.

我已经看到了这个人在所有函数中使用var self = this然后使用的示例,self.以确保范围始终正确.

然后我看到了使用.prototype添加属性的示例,而其他人则使用内联方式.

有人可以给我一个具有一些属性和方法的JavaScript对象的正确示例吗?

javascript

464
推荐指数
7
解决办法
13万
查看次数

我可以将变量设置为undefined或将undefined作为参数传递吗?

我对JavaScript undefinednull价值观有点困惑.

什么是if (!testvar)真正做到?它测试undefinednull或只undefined

一旦定义了变量,我可以将其清除undefined(因此删除变量)吗?

我可以undefined作为参数传递吗?例如:

function test(var1, var2, var3) {

}

test("value1", undefined, "value2");
Run Code Online (Sandbox Code Playgroud)

javascript undefined

296
推荐指数
6
解决办法
24万
查看次数

如何将JS变量的值(而不是引用)传递给函数?

这是我正在尝试运行的简化版本:

for (var i = 0; i < results.length; i++) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() { 
        change_selection(i);
    }); 
}
Run Code Online (Sandbox Code Playgroud)

但我发现每个监听器都使用results.length的值(for循环终止时的值).我如何添加监听器,使得每次使用i时我添加它的值,而不是对i的引用?

javascript closures listener pass-by-reference pass-by-value

116
推荐指数
3
解决办法
4万
查看次数

为什么我发现Javascript/jQuery如此难以正确?

我的背景是在C中,我已经选择了PHP,mySQL,HTML,CSS而没有太多问题.

但我发现Javascript/jQuery难以正确使用.很沮丧.为什么?

  1. 它似乎违反了许多传统的编程原则(例如可变范围)

  2. 未定义的变量似乎无处不在,并且已经存在与它们相关联的值.例如(来自jQuery文档):

    $("a").click(function(event) {
        event.preventDefault();
        $('<div/>')
              .append('default ' + event.type + ' prevented')
              .appendTo('#log');
    });
    
    Run Code Online (Sandbox Code Playgroud)

    什么是"事件"?我必须使用此变量名称吗?我应该假设这个对象是用正确的东西神奇地实例化的,我可以使用JQuery API中的任何方法列表吗?

  3. 似乎有一堆随机规则(例如,返回false以停止默认操作,但有时这不起作用?)

  4. 调试时的非确定性行为.(例如,我刷新浏览器,尝试一些东西并获取结果X用于我在Firebug中观看的JS变量.我再次刷新,我得到结果Y?)

  5. 非常混乱的代码很难遵循.什么时候发生?我正在使用Firebug和Chrome开发者工具,但我没有获得足够的可见度.

似乎每天都有一些随机的JS"规则"出现在我的任何JS书籍或教程中我从未见过.

我需要做些什么才能使Javascript/jQuery对我更具确定性,控制性和逻辑性?

有没有资源可以解释Javascript的怪癖/陷阱?

谢谢!

javascript jquery

48
推荐指数
3
解决办法
1万
查看次数

在一个周末学习JavaScript?

此问题类似,我想知道有经验的JavaScript开发人员是否有他们使用的任何网站示例,以便在24/28小时内获取JavaScript的基础知识?我看了Douglas Crockford的Google Tech Talk,我买了"Javascript:The Good Parts"这本书,但我没有时间阅读它.

javascript

41
推荐指数
2
解决办法
3万
查看次数

Javascript字符串如何不是对象?

这不是一个笑话的设置,我真的在问.

Douglas Crockford喜欢说在javascript原型面向对象语言中没有必要new.

他解释说,这new只是为了让人们从基于类(即" 经典 ")的面向对象编程语言中获得某种程度的安慰:

JavaScript,我们很难new

JavaScript是一种原型语言,但它有一个new运算符,试图使它看起来有点像经典语言.这往往会使程序员感到困惑,从而导致一些有问题的编程模式.

您永远不需要new Object()在JavaScript中使用.请改用对象文字{}.

好的:

  • new
  • {}

但是后来评论者VítorDeAraújo指出这两者并不相同.他给出了一个例子,表明a string不像object:

字符串对象和字符串值不是同一个东西:

js> p = "Foo"
Foo
js> p.weight = 42
42
js> p.weight // Returns undefined

js> q = new String("Foo")
Foo
js> q.weight = 42
42
js> q.weight
42
Run Code Online (Sandbox Code Playgroud)

字符串值不能具有新属性.同样的事情对其他类型也有效.

这里发生了什么string不是一个object?我是否混淆了javascript与其他一些语言,其中一切都是对象?

javascript

36
推荐指数
1
解决办法
6802
查看次数

什么是顶级的JavaScript陷阱?

我正在计划关于JavaScript的介绍性演讲,在准备过程中,我想知道新秀陷入的最大陷阱是什么.

我知道在我完全理解闭包之前我已经遇到了一些问题,但JavaScript中的许多奇怪行为都不是我想的了......

那么,你应该向新秀指出哪些陷阱?

javascript debugging

35
推荐指数
8
解决办法
1万
查看次数

在声明之前引用JavaScript值 - 有人可以解释这一点

我希望有人可以向我解释为什么在浏览器中查看HTML时,下面的JavaScript/HTML会显示"门#2":

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script type="text/javascript">
        function testprint() {
            alert('door #1');
        };

        window.onload = testprint;

        function testprint() {
            alert('door #2');
        };

        testprint = function() {
            alert('door #3');
        };
    </script>
    <script type="text/javascript">
        function testprint() {
            alert('door #4');
        };
    </script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

由于只有声明testprintwindow.onload设置之前发生testprint,我希望window.onload原因'门#1'出现.实际上,onload导致'门#2'.请注意,无论是否包含第一个声明,它都会执行此操作testprint.

第三个和第四个testprint使用声明使用不同的方式来分配函数,我试着看看它是否会覆盖window.onload同样的第二个声明的testprint行为.它没.请注意,如果我将第四个声明移动到第testprint一个脚本块的末尾,它将被调用window.onload.

javascript

14
推荐指数
1
解决办法
3226
查看次数

JS对象this.method()通过jQuery中断

我相信这有一个简单的答案,但是周五下午,我很累.:(

不确定如何解释它,所以我将继续并发布示例代码...


这是一个简单的对象:

var Bob =

{ Stuff : ''

, init : function()
    {
        this.Stuff = arguments[0]
    }

, doSomething : function()
    {
        console.log( this.Stuff );
    }

}
Run Code Online (Sandbox Code Playgroud)

在这里它被使用:

$j = jQuery.noConflict();
$j(document).ready( init );


function init()
{
    Bob.init('hello');

    Bob.doSomething();

    $j('#MyButton').click( Bob.doSomething );
}
Run Code Online (Sandbox Code Playgroud)

一切都有效,除了最后一行.当jQuery调用doSomething方法时,它会覆盖'this'并阻止它工作.

试图使用只是Stuff不起作用.

那么我如何以允许jQuery调用它的方式引用对象自己的属性,并且还允许对象使用调用jQuery对象?

即我希望能够做到这样的事情:

doSomething : function()
    {
        console.log( <CurrentObject>.Stuff + $j(<CallerElement>).attr('id') );
    }
Run Code Online (Sandbox Code Playgroud)

(在哪里<CurrentObject><CallerElement>替换为适当的名称.)

javascript jquery json this

13
推荐指数
3
解决办法
2450
查看次数