小编Chr*_*phe的帖子

多个参数与选项对象

在创建具有多个参数的JavaScript函数时,我总是面临这样的选择:传递参数列表与传递选项对象.

例如,我正在编写一个函数来将nodeList映射到数组:

function map(nodeList, callback, thisObject, fromIndex, toIndex){
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以改用它:

function map(options){
    ...
}
Run Code Online (Sandbox Code Playgroud)

options是一个对象:

options={
    nodeList:...,
    callback:...,
    thisObject:...,
    fromIndex:...,
    toIndex:...
}
Run Code Online (Sandbox Code Playgroud)

推荐哪种方式?是否有何时使用其中一种?

[更新]似乎有一个共识支持选项对象,所以我想添加一个注释:在我的案例中我试图使用参数列表的一个原因是有一个与JavaScript一致的行为内置于array.map方法.

javascript json arguments function object

148
推荐指数
6
解决办法
4万
查看次数

JSON密钥名称中哪些字符有效/无效?

对于JavaScript对象或JSON字符串,键名中是否有任何禁用字符?还是需要转义的字符?

更具体地说,我想在键名中使用"$"," - "和空格.

javascript json key object

132
推荐指数
4
解决办法
16万
查看次数

tex()与textarea的text()

我正在使用jQuery,并想知道我是否应该使用val()或text()(或其他方法)来读取和更新textarea的内容.

我已经尝试了两种方法,但我遇到了两个问题.当我使用text()更新textarea时,换行符(\n)不起作用.当我使用val()来检索textarea内容时,如果文本太长,则文本会被截断.

forms jquery textarea

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

sessionStorage和localStorage的范围

我阅读了有关sessionStorage和localStorage的一些文档,但我不明白范围是什么:域,特定页面?

例如,如果我有以下页面:

http://example.com/products.aspx?productID=1

http://example.com/products.aspx?productID=2

http://example.com/services.aspx?serviceID=3

如果我在上面的每个页面上运行(idvalue是查询字符串中的值):

localStorage.setItem('ID',idvalue);
Run Code Online (Sandbox Code Playgroud)

我最终会存储3个不同的值,或者值是否会相互覆盖?

javascript html5 local-storage sessionstorage

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

如何估计gzip压缩脚本的大小?

如何在gzip压缩之后估算我的JavaScript文件的大小?有在线工具吗?或者它与使用winzip类似?

javascript gzip minify

71
推荐指数
6
解决办法
4万
查看次数

在ES6中筛选或映射节点列表

在ES6中过滤或映射节点列表的最有效方法是什么?

根据我的读数,我会使用以下选项之一:

[...nodelist].filter
Run Code Online (Sandbox Code Playgroud)

要么

Array.from(nodelist).filter
Run Code Online (Sandbox Code Playgroud)

你会推荐哪一个?有没有更好的方法,例如没有涉及数组?

javascript arrays filter nodelist ecmascript-6

52
推荐指数
5
解决办法
3万
查看次数

触发对程序化更改为输入值的操作

我的目标是观察输入值并在其值以编程方式更改时触发处理程序.我只需要它用于现代浏览器.

我尝试了很多组合使用defineProperty,这是我最新的迭代:

var myInput=document.getElementById("myInput");
Object.defineProperty(myInput,"value",{
    get:function(){
        return this.getAttribute("value");
    },
    set:function(val){
        console.log("set");
        // handle value change here
        this.setAttribute("value",val);
    }
});
myInput.value="new value"; // should trigger console.log and handler
Run Code Online (Sandbox Code Playgroud)

这似乎做了我的预期,但感觉就像一个黑客,因为我重写现有的价值属性和玩value(属性和属性)的双重身份.它还打破了change似乎不喜欢修改属性的事件.

我的其他尝试:

  • 一个setTimeout/setInterval循环,但这也不干净
  • 各种watchobservepolyfill,但它们打破输入值属性

什么是获得相同结果的正确方法?

现场演示:http://jsfiddle.net/L7Emx/4/

[编辑]澄清一下:我的代码正在观看一个输入元素,其他应用程序可以推送更新(例如,由于ajax调用,或者由于其他字段的更改).我无法控制其他应用程序如何推送更新,我只是一个观察者.

[编辑2]为了澄清"现代浏览器"的含义,我对能够在IE 11和Chrome 30上运行的解决方案感到非常满意.

[更新]根据接受的答案更新了演示:http://jsfiddle.net/L7Emx/10/

@ mohit-jain建议的技巧是为用户交互添加第二个输入.

javascript html-input defineproperty

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

如何检测iframe中的错误404?

我的网页使用iframe来收集其他网页的内容.所有页面都在同一个域中.

从主页面,有没有办法确认所有iframe已加载,并且没有404错误?

javascript iframe http-status-code-404

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

JSON polyfill:JSON 2还是JSON 3?

我需要一个JSON polyfill来支持IE 7和一些IE 8和IE 9模式.我应该选择JSON 2还是JSON 3?显然JSON 3是一个更现代的实现,但是例如像html5please这样的网站甚至没有提及它并推荐JSON 2.

json polyfills

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

缩小对象属性的解决方案?

在我的JavaScript应用程序中,我仅将几个对象用于内部目的(用户不需要访问它们).例如:

var images={
    blank:"blank.gif",
    plus:"plus.gif",
    minus:"minus.gif"
}
Run Code Online (Sandbox Code Playgroud)

当我使用像Uglify.js这样的缩小器时,属性名称(空白,加号,减号)保持不变.有没有办法缩小它们?

到目前为止我所考虑的事情:

  • 在高级模式下使用Google Closure minifier,但这会破坏我的代码
  • 用变量替换对象属性(例如var imagesBlank ="blank.gif")但它使代码的可读性降低

有没有更好的办法?

javascript object minify

13
推荐指数
3
解决办法
3333
查看次数