小编zzz*_*Bov的帖子

什么是JSLint批准的创建长字符串的方法?

作为前言,是的,我知道JSLint更多的是一套指导而不是规则.

在使用JSLint清理我继承的一些代码时,有很多地方会在字符串中使用某些URL.它们对于脚本来说是必需的,但是比标准的50个字符行长更长.

我一直只是路过那些特定的路线,因为它们不是问题; 但是,它让我对在JS代码中处理长字符串文字的最佳方法感到好奇.

对于标记字符串,使用字符串连接是有意义的:

'<div>' +
  '<h1>Foo</h1>' +
  '<p>Lorem ipsum</p>' +
'</div>'
Run Code Online (Sandbox Code Playgroud)

但是我不认为它对URL有意义:

'http://example.com/foo/bar/baz/fizz/buzz/lorem/ipsum/etc/...'
Run Code Online (Sandbox Code Playgroud)

编辑

对于某些哈希值(例如用于API密钥),它也没有意义:

//i.e. this made up string of me bashing on my keyboard
'0aidf9ejvr0e9vjkilkj34ioijs90eu8f9948joljse890f90jiljoi4'
Run Code Online (Sandbox Code Playgroud)

javascript string jslint string-literals

9
推荐指数
2
解决办法
9269
查看次数

Javascript闭包

我仍然对JavaScript中的闭包概念感到困惑.我得到的结论是,闭包是内部函数在母函数返回后访问其母函数中创建的变量的能力.但我仍然困惑为什么我们必须创建内部函数来保护局部变量,如果我们可以在函数内部创建一个变量?

javascript closures

9
推荐指数
1
解决办法
644
查看次数

有没有href且没有名字的锚标签是有效的HTML吗?

有没有href且没有名字的锚标签是有效的HTML吗?在我们的应用程序中,我们有一些删除链接被禁用(因此没有href属性),但仍然显示给用户.


我代表Joshua Muheim发布了这个问题,在相关问题评论中提到了这个问题.它与原始问题非常相似,但又不同,我认为将其作为一个单独的问题打开是值得的.

html hyperlink html-validation

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

为什么这些 fetch 方法是异步的?

Fetch 是用于发出网络请求的新的基于 Promise 的 API:

fetch('https://www.everythingisawesome.com/')
  .then(response => console.log('status: ', response.status));
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义——当我们发起网络调用时,我们会返回一个 Promise,让我们的线程继续处理其他业务。当响应可用时,Promise 中的代码就会执行。

但是,如果我对响应的有效负载感兴趣,我会通过响应的方法而不是属性来这样做:

  • 数组缓冲区()
  • 斑点()
  • 表单数据()
  • json()
  • 文本()

这些方法返回承诺,我不清楚为什么。

fetch('https://www.everythingisawesome.com/') //IO bound
  .then(response => response.json()); //We now have the response, so this operation is CPU bound - isn't it?
  .then(entity => console.log(entity.name));
Run Code Online (Sandbox Code Playgroud)

为什么处理响应的有效负载会返回一个承诺 - 我不清楚为什么它应该是一个异步操作。

javascript fetch

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

在javascript匿名方法中访问复制的整数变量

我是一名C#开发人员,习惯于在C#中使用闭包.目前我必须使用匿名javascript函数并遇到以下代码段的问题:

    function ClosureTest() {
    var funcArray = new Array();

    var i = 0;
    while (i < 2) {
        var contextCopy = i;

        funcArray[i] = function() { alert(contextCopy); return false; };

        i++;
    }

    funcArray[0]();
    funcArray[1]();
}
Run Code Online (Sandbox Code Playgroud)

我希望第一个funcArray()电话说0,第二个说1.然而,他们都说1.怎么可能?

通过写作,var contextCopy = i我确保我创建了i-variable 的副本.然后,在每次迭代中,我创建一个全新的函数指针.每个函数都指自己的副本i,即contextCopy.但是,由于某些原因,两个创建的函数都引用相同的contextCopy变量.

这在javascript中如何工作?

javascript closures function

7
推荐指数
2
解决办法
4839
查看次数

为什么HTML <buttons>在所有现代浏览器中都遵循旧的IE5盒子模型?

我有一个奇怪的问题,一个按钮和一些CSS,我注意到它表现得好像它坚持旧的IE5盒子模型,其中height =高度+填充.

经过一番浏览后,我发现这篇文章证实了我的假设,但没有解释为什么会这样.

有谁知道为什么所有现代浏览器(Firefox,Chrome,IE9)都对待这样的按钮元素?有没有人知道一个解决方法,使按钮元素使用盒子模型(据我所知),这些浏览器中的其他元素使用?

html css

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

在JS中将vh单位转换为px

不幸的100vh是,并不总是与100%浏览器高度相同,如下例所示.

html,
body {
    height: 100%;
}

body {
    overflow: scroll;
}

.vh {
    background-color: blue;
    float: left;
    height: 50vh;
    width: 100px;
}

.pc {
    background-color: green;
    float: left;
    height: 50%;
    width: 100px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="vh"></div>
<div class="pc"></div>
Run Code Online (Sandbox Code Playgroud)

这个问题在iPhone 6+上更为明显,上部位置栏和下部导航栏如何在滚动时展开和收缩,但不包括在计算中100vh.

100%可以通过window.innerHeight在JS中使用来获取高度的实际值.

有没有一种方便的方法来计算100vhJS中像素的当前转换?

我试图避免需要生成带内联样式的虚拟元素来计算100vh.

出于此问题的目的,假设一个恶意环境,其中max-widthmax-height可能产生不正确的值,并且100vh页面上没有任何现有元素.基本上,假设任何可能出错的东西都有本机浏览器功能,但保证是干净的.

到目前为止我提出的最好的是:

function vh() {
    var div,
        h;
    div = document.createElement('div');
    div.style.height = '100vh';
    div.style.maxHeight = …
Run Code Online (Sandbox Code Playgroud)

javascript css viewport-units

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

IE href ="javascript:customFunction()"没有在第一帧加载时触发

我有一个自定义日期选择器弹出窗口有时无法在IE中工作.它适用于Chrome和Edge.

代码看起来像这样:

<frameset>
    <frame>Buttons for next/prev month/year</frame>
    <frame>This is the actual calendar that gets redrawn when the above buttons are used
        <a href="javascript:parent.opener.setDate(1);">1</a> //there's a different anchor tag for each day of the month
    </frame>
<frameset>
Run Code Online (Sandbox Code Playgroud)

所以这里有点奇怪.我们有两个网络,称之为新旧.旧的可能有很多无证的全球政策变化,新的可能接近政府标准.这适用于旧网络上的任何浏览器,但不适用于新网络上的IE(11).它适用于Edge.此外,如果顶部框架按钮用于选择下一个/上个月,或仅选择"今天"按钮,则所有底部框架锚定链接都能正常工作.没有控制台错误/警告,网络监视器中没有任何内容显示请求返回错误代码,点击只是不注册.我在customFunction()中放置一个断点,当链接不起作用时它不会中断,但是如果链接可以工作,它将会中断.

唯一对我来说很奇怪的是整个弹出窗口的代码看起来像:

str = "<frameset><frame name='topFrame' " + 
    "src='javascript:parent.opener.drawTop'></frame><frame name='bottomFrame' "+
    "src='javascript:parent.opener.drawBottom'><frame</frameset>"

document.write(str);
Run Code Online (Sandbox Code Playgroud)

我确实想检查一下,当使用prev/next/etc按钮时重绘底部框架的代码与第一次加载时调用的函数相同.

然而,看起来奇怪的是,在第一次加载时,DOM检查器显示所有内容(顶部框架,底部框架包括每月每天的所有单独数字等),但调试器(F12工具)不显示用document.write(str)加载的代码; 线.为了能够看到该代码并设置断点,我必须使用prev/next按钮,然后在Debugger中显示另一个.html文件,该文件具有与DOM匹配的构造HTML.

javascript internet-explorer frameset

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

为什么{} <function(){}?

当我在JavaScript中使用真值表时,我注意到以下评估结果为true:

var a, b, c;
a = {};
b = function(){};
c = a < b;
console.log(c);
Run Code Online (Sandbox Code Playgroud)

为什么?

我只在Firefox中对此进行了测试,我确信我可以在ECMAScript 2.6.2规范中挖掘细节,但TBH我感觉很懒.

javascript operators logical-operators

6
推荐指数
2
解决办法
309
查看次数

可以通过JavaScript读取/ statuses/user_timeline吗?

我以前用过一些jQuery在twitter上阅读推文:

$.ajax('https://api.twitter.com/1/statuses/user_timeline.json', {
    crossDomain: true,
    data: {
        screen_name: 'twitterapi',
        count: 5
    },
    dataType: 'jsonp'
}).done(function (tweets) {
    console.log(tweets);
});
Run Code Online (Sandbox Code Playgroud)

由于Twitter正在弃用他们的1.0 API,并且需要OAuth用于1.1 API,我一直试图弄清楚是否仍然可以以相同的方式获取推文数据.

只需将网址更改为:

https://api.twitter.com/1.1/statuses/user_timeline.json
Run Code Online (Sandbox Code Playgroud)

导致400 Bad Request没有消息的响应.

我知道有一个Twitter的工具来创建的请求OAuth的签名,但我不知道如何使用JSONP请求使用它,甚至如果它可以与JSONP请求中使用.

在Twitter 1.1 API中仍然可以读取用户的时间表吗?

twitter jquery twitter-oauth

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