小编Isa*_*aac的帖子

为什么"true"== true在JavaScript中显示为false?

MDC描述了==运营商如下:

如果两个操作数的类型不同,则JavaScript转换操作数,然后应用严格比较.如果操作数是数字或布尔值,操作数将尽可能转换为数字; 否则,如果任一操作数是字符串,则另一个操作数将转换为字符串(如果可能).

考虑到这一点,我会评估"true" == true如下:

  1. 它们属于同一类型吗?没有
  2. 操作数是数字还是布尔值?
  3. 我们可以将两者都转换为数字吗?没有(isNaN(Number("true")) // true)
  4. 两个操作数都是字符串吗?
  5. 我们可以将其他操作数转换为字符串吗?是的(String(true) === "true" // true)

我已经结束了与弦"true""true",这应该求true,但JavaScript的显示错误.

我错过了什么?

javascript string equals

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

从Express/connect中间件"结束"请求的正确方法是什么?

假设我有这样的中间件;

var express = require('express');
var app = express();

app.use(function (req, res, next) {
    var host = "example.com";

    if (req.host !== host) {
        res.redirect(301, host + req.originalUrl);
        res.end();
    }
});
Run Code Online (Sandbox Code Playgroud)

我需要遵守哪些规则?

  1. 我应该打电话res.end()吗?(或者这样res.redirect()做对我来说?)
  2. 我应该打电话next()吗?(或连接检测请求已结束并干净地退出?)
  3. 假设我应该打电话next(),我想这意味着可能会收到对我的中间件的请求,这些请求可能已经被链中较高的其他中间件终止; 我如何保护自己不受此事影响?

javascript connect node.js express

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

停止JPopupMenu窃取焦点

我有一个JTextField我希望建议结果与用户的输入匹配.我在一个JList包含的内容中显示这些建议JPopupMenu.

但是,当以编程方式打开弹出菜单时show(Component invoker, int x, int y),焦点将从中获取JTextField.

奇怪的是,如果我打电话setVisible(true),焦点不会被盗; 但是然后JPopupMenu没有连接到任何面板,并且当盒子打开时最小化应用程序时,它仍然涂在窗口上.

我也尝试将焦点重置为JTextField使用requestFocus(),但后来我必须使用恢复插入位置SwingUtilities.invokeLater(),并且调用后面的东西给用户一点点余地来弄乱现有内容/覆盖它/或做其他不可预知的事情.

我得到的代码是有效的:

JTextField field = new JTextField();
JPopupMenu menu = new JPopupMenu();

field.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
        JList list = getAListOfResults();

        menu.add(list);
        menu.show(field, 0, field.getHeight());
    }
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议最好的途径,以JPopupMenu编程方式显示,同时保持对焦点的关注JTextField

java swing focus jpopupmenu

11
推荐指数
1
解决办法
2732
查看次数

以同步方式使用requirejs(AMD)是错误的吗?

我正在开发一个JavaScript重的Web应用程序; 如果没有JavaScript,整个应用程序都是无用的.我目前正在使用requirejs作为我的模块加载器,以及将r.js我的JS优化为生产中的单个文件的工具.

目前,在生产中我的标记看起来像这样;

<script src="/js/require.js"></script>
<script>
    require.config({
       // blah blah blah
    });

    require(['editor']); // Bootstrap the JavaScript code.
</script>
Run Code Online (Sandbox Code Playgroud)

但是,这会异步加载JavaScript,这会使页面呈现尽管在加载JavaScript之前无法使用; 我没有看到这一点.相反,我想像这样同步加载JavaScript ;

<script src="/js/bundle.js"></script><!-- combine require.js, config and editor.js -->
Run Code Online (Sandbox Code Playgroud)

这样,当呈现页面时,它是可用的.我已经读过所有现代浏览器都支持并行加载,这使我相信互联网上的大多数建议都建议避免这种方法,因为它阻止并行下载已经过时了.

然而;

  1. AMD(异步模块定义)暗示这不是必须使用requirejs的方式.
  2. 在开发中,我想将未组合的文件作为多个脚本标签插入,而不是单个缩小的文件;

    <script src="/js/require.js"></script>
    <script>/* require.config(...); */</script>
    <script src="/js/editor-dep-1.js"></script>
    <script src="/js/editor-dep-2.js"></script>
    <script src="/js/editor.js"></script>
    
    Run Code Online (Sandbox Code Playgroud)

    ...但是这在requirejs中显得非常繁琐(使用r.js生成虚假构建,获取依赖项的列表editor.js),感觉不对.

因此,我的问题如下;

  1. 我是否正确避免同步<script />建议过时?
  2. 以这种方式使用requirejs/AMD是错误的吗?
  3. 我错过了替代技术/方法/工具/模式吗?

javascript amd requirejs

7
推荐指数
1
解决办法
6503
查看次数

为什么没有将ES5 Object方法添加到Object.prototype?

ES5添加数量方法Object,这似乎打破的JavaScript的语义的一致性.

举例来说,在此之前的扩展,JavaScript API的身边总是围绕operarting 对象本身;

var arrayLength = [].length;
var firstPosInString = "foo".indexOf("o");
Run Code Online (Sandbox Code Playgroud)

...新的Object方法就像;

var obj = { };
Object.defineProperty(obj, {
    value: 'a',
    writable: false
});
Run Code Online (Sandbox Code Playgroud)

......当以下内容更加符合时:

var obj = { };
obj.defineProperty({
    value: 'a',
    writable: false
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以冷静我的好奇心,为什么会这样?是否有任何代码片段会破坏?标准委员会是否就他们选择这种方法的原因进行了公开讨论?

javascript consistency ecmascript-5

6
推荐指数
1
解决办法
582
查看次数