作为前言,是的,我知道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中的闭包概念感到困惑.我得到的结论是,闭包是内部函数在母函数返回后访问其母函数中创建的变量的能力.但我仍然困惑为什么我们必须创建内部函数来保护局部变量,如果我们可以在函数内部创建一个变量?
有没有href且没有名字的锚标签是有效的HTML吗?在我们的应用程序中,我们有一些删除链接被禁用(因此没有href属性),但仍然显示给用户.
我代表Joshua Muheim发布了这个问题,在相关问题的评论中提到了这个问题.它与原始问题非常相似,但又不同,我认为将其作为一个单独的问题打开是值得的.
Fetch 是用于发出网络请求的新的基于 Promise 的 API:
fetch('https://www.everythingisawesome.com/')
.then(response => console.log('status: ', response.status));
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义——当我们发起网络调用时,我们会返回一个 Promise,让我们的线程继续处理其他业务。当响应可用时,Promise 中的代码就会执行。
但是,如果我对响应的有效负载感兴趣,我会通过响应的方法而不是属性来这样做:
这些方法返回承诺,我不清楚为什么。
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)
为什么处理响应的有效负载会返回一个承诺 - 我不清楚为什么它应该是一个异步操作。
我是一名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中如何工作?
我有一个奇怪的问题,一个按钮和一些CSS,我注意到它表现得好像它坚持旧的IE5盒子模型,其中height =高度+填充.
经过一番浏览后,我发现这篇文章证实了我的假设,但没有解释为什么会这样.
有谁知道为什么所有现代浏览器(Firefox,Chrome,IE9)都对待这样的按钮元素?有没有人知道一个解决方法,使按钮元素使用盒子模型(据我所知),这些浏览器中的其他元素使用?
不幸的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-width或max-height可能产生不正确的值,并且100vh页面上没有任何现有元素.基本上,假设任何可能出错的东西都有本机浏览器功能,但保证是干净的.
到目前为止我提出的最好的是:
function vh() {
var div,
h;
div = document.createElement('div');
div.style.height = '100vh';
div.style.maxHeight = …Run Code Online (Sandbox Code Playgroud) 我有一个自定义日期选择器弹出窗口有时无法在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中使用真值表时,我注意到以下评估结果为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我感觉很懒.
我以前用过一些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中仍然可以读取用户的时间表吗?