小编Koo*_*Inc的帖子

这个递归函数如何创建范围工作?

这个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方法.有人可以解释一下吗?我错过了什么?

javascript arrays recursion

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

删除:有人可以解释这种行为

比较这段代码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]中无论如何都是不允许的.

javascript operators

4
推荐指数
1
解决办法
439
查看次数

Crockfords JSON Parser如何工作?

我已经盯着这里找到的代码了很长时间.这是Douglas Crockfords JSON解析函数(称为递归下降解析器).任何人都可以详细说明这个解析器的机制吗?我真的无法理解它.

javascript parsing json

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

使用documentFragment的IE性能不佳

为了测试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)

javascript internet-explorer dom-manipulation

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

为什么toPrecision返回一个String?

查看此代码:

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 floating-point types numbers

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

为什么我不能从包含毫秒的字符串创建日期?

在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)

javascript datetime

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

为什么10000000000000.126.toString()1000000000000.127(我能做些什么来阻止它)?

为什么是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 floating-point numbers

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

使用 JavaScript 获取 UTF-8 URL 参数

我正在尝试获取一个文本输入字段,其值作为在 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 功能。

javascript utf-8

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

为什么这个javascript代码不起作用?

http://jsfiddle.net/FZQuM/2/

我希望div'divi'显示输入框'hitbox'中的内容.

编辑:在这里放置这些代码并不困难,特别是如果这么短

document.getElementById('hitbox')
    .onchange(document.getElementById('divi')
               .innerHTML = document.getElementById('hitbox').value;
Run Code Online (Sandbox Code Playgroud)

html javascript dynamic

0
推荐指数
1
解决办法
129
查看次数

jQuery在页面标题中获取特定值

(1) Website Name

(3) Website Name - 08-08-2013 New York City

从上面的例子中,我如何能够使用jQuery或Javascript从括号之间获取值?

我知道我可以使用下面的代码获得标题

var current_title = $(document).attr('title');

但不确定如何确定括号之间的实际值

javascript

0
推荐指数
1
解决办法
57
查看次数