从这个SO问题中的选定答案,这个非常巧妙的函数创建一个范围从1到i的数组:
function range1(i){return i?range1(i-1).concat(i):[]}
Run Code Online (Sandbox Code Playgroud)
它完美无缺.叫我傻,但我无法理解它是如何工作的.让我们说我们有range1(5).现在进入函数,我们有i,所以它返回自己的参数i-1(4)和concats i(5).但在这里我被困住了:怎么range1 知道它与数组有关?我会说在第一次运行后返回值(只要我们有i,所以i!==0)将是一个数字.而Number没有concat方法.有人可以解释一下吗?我错过了什么?
比较这段代码1:
somevar = 5;
delete window.somevar;
alert(typeof somevar) //=> undefined, so deleted
Run Code Online (Sandbox Code Playgroud)
这段代码:
var somevar = 5;
delete window.somevar;
alert(typeof somevar) //=> number, so NOT deleted
Run Code Online (Sandbox Code Playgroud)
现在在第一个块中,somevar删除,在第二个块中,它不是.唯一的区别是var在第二个块中使用关键字.两个块都在全局范围内运行.
这可以解释一下吗?
1代码不能在chrome-console或firebug中测试,也不能在jsfiddle中测试.在这些环境中,所有代码都是evalled,并且在evalled代码中delete可以处理任何结果eval(请参阅更多相关信息).在IE <9delete window[anything]中无论如何都是不允许的.
我已经盯着这里找到的代码了很长时间.这是Douglas Crockfords JSON解析函数(称为递归下降解析器).任何人都可以详细说明这个解析器的机制吗?我真的无法理解它.
为了测试DOM操作与innerHTML,我使用documentFragment(网页)将这些小href元素附加到div元素上.Chrome或Firefox的性能还可以,但在IE(10,9,8)中它的表现非常糟糕,大约需要10-12秒.任何人都可以解释这种差异和/或详细说明提高IE性能的解决方案吗?
这是一个展示它的jsfiddle.
方法:
function useFragment(){
var frag = document.createDocumentFragment(),
i = 10000,
rval = document.createElement('span');
frag.appendChild(rval);
do {
var optText = 'option '+i
,ref = document.createElement('a')
,zebra = i%2 ? 'zebra' : ''
,islist = true
,isSel = i === 5
;
rval.insertBefore(ref,rval.firstChild);
ref.appendChild(document.createTextNode(optText));
ref.id = 'opt' + i;
ref.className = zebra + (islist && isSel ? ' scrollSelect' : '');
ref.href = '#' + i;
ref.title = …Run Code Online (Sandbox Code Playgroud) 查看此代码:
function testprecision(){
var isNotNumber = parseFloat('1.3').toPrecision(6);
alert(typeof isNotNumber); //=> string
}
Run Code Online (Sandbox Code Playgroud)
我原以为是一个数字.如果'isNotNumber'应该是一个实数,重铸是解决方案:
alert(typeof parseFloat(isNotNumber)) //=> number
Run Code Online (Sandbox Code Playgroud)
[编辑]感谢您的回答.我总结说,精度不是那么精确.它可以表示数字的总位数或小数位数.荷兰的大多数人(我来自哪里)都会想到"分数位数"的精确度.javascript toPrecision方法涉及第一个表示,因此这是令人困惑的.无论如何,这种方法可以引入"虚假精度",对吗?对于第二个含义,我们有固定,同样适用于此(返回字符串,错误精度的可能性).
无论如何,我重新发明轮子是我的主要爱好,我利用我在这里收集的知识,围绕构建一个javascript浮动对象.也许它对那里的某个人有用,或者你们中的一个人有更好的想法?
function Float(f,nDec) {
var Base = this,val;
setPrecision( nDec || 2 );
set( f || 0, nDec || Base.precision );
Base.set = set;
Base.ndec = setPrecision;
/** public setprecision
* sets a value for the number of fractional
* digits (decimals) you would like getf to
* return. NB: can't be more than 20. …Run Code Online (Sandbox Code Playgroud) 在javascript中,您可以从字符串创建Date对象,例如
var mydate = new Date('2008/05/10 12:08:20');
console.log(mydate); //=> Sat May 10 2008 12:08:20 GMT+0200
Run Code Online (Sandbox Code Playgroud)
现在在字符串中使用毫秒来尝试这个
var mydate = new Date('2008/05/10 12:08:20:551'); // or '2008/05/10 12:08:20.551'
console.log(mydate); //=> NaN
Run Code Online (Sandbox Code Playgroud)
只是出于好奇:这是为什么?
编辑:感谢您的回答,这些都提供了充分的解释.也许在将来某个日期字符串中会支持使用毫秒.直到然后我把它煮熟了,这可能对某人有用:
function dateFromStringWithMilliSeconds(datestr){
var dat = datestr.split(' ')
,timepart = dat[1].split(/:|\./)
,datestr = dat[0]+' '+timepart.slice(0,3).join(':')
,ms = timepart[timepart.length-1] || 0
,date;
date = new Date(datestr);
date.setMilliseconds(ms);
return date;
}
Run Code Online (Sandbox Code Playgroud) 为什么是10000000000000.126.toString()1000000000000.127而100000000000.126.toString()不是?
我认为它必须与Js中的Number的最大值有关(根据这个SO问题),但这与浮点运算有何关系?
我问,因为我写了这个函数来使用数千个分隔符格式化数字,并希望防止这种情况.
function th(n,sep) {
sep = sep || '.';
var dec = n.toString().split(/[,.]/),
nArr = dec[0].split(''),
isDot = /\./.test(sep);
return function tt(n) {
return n.length > 3 ?
tt(n.slice(0,n.length-3)).concat(n.slice(n.length-3).join('')) :
[n.join('')]
;
}(nArr)
.join(sep)
+ (dec[1] ? (isDot?',':'.') + dec[1] : '');
}
sep1000(10000000000000.126); //=> 10.000.000.000.000,127
sep1000(1000000000000.126); //=> 1.000.000.000.000,126
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一个文本输入字段,其值作为在 JavaScript 中执行的 XSL 转换的参数发送。我已经使用 get 方法设置了一个表单,我的脚本获取 URL 参数如下:
var word=unescape((''+self.location.search).substring(5)).toLowerCase();
Run Code Online (Sandbox Code Playgroud)
这工作正常,除非输入包含特殊字符。我已将 HTML 页面的编码设置为 UTF-8,并添加了
accept-charset="utf-8"
Run Code Online (Sandbox Code Playgroud)
到表格。我还在脚本标签中指定了 charset="utf-8" ,但它仍然不起作用。我的浏览器 (Firefox) 设置为 UTF-8 作为默认编码。我也尝试删除 unescape 功能。
我希望div'divi'显示输入框'hitbox'中的内容.
编辑:在这里放置这些代码并不困难,特别是如果这么短
document.getElementById('hitbox')
.onchange(document.getElementById('divi')
.innerHTML = document.getElementById('hitbox').value;
Run Code Online (Sandbox Code Playgroud) (1) Website Name
(3) Website Name - 08-08-2013 New York City
从上面的例子中,我如何能够使用jQuery或Javascript从括号之间获取值?
我知道我可以使用下面的代码获得标题
var current_title = $(document).attr('title');
但不确定如何确定括号之间的实际值