小编rai*_*7ow的帖子

如何使用UglifyJS缩小文件夹中的多个Javascript文件?

您好我正在使用uglifyJs来缩小我的javascript文件,它一次只能处理一个文件,我所要求的是将名为JS的文件夹中存在的所有javascript文件缩小到一个名为JSM的文件夹中,以便清楚我的JS文件夹中有2个名为test1.js和test2.js的文件,我想对该文件夹运行uglify并在JSM文件夹中生成test1.min.js和test2.min.js,所以有办法吗这个?像这样的命令:

uglifyjs -c -m JS/*.js JSM/*.min.js
Run Code Online (Sandbox Code Playgroud)

或任何可以帮助我的想法.

谢谢.

node.js uglifyjs uglifyjs2

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

通过HTTP在javascript中发送二进制数据

我正在尝试将HTTP POST发送到网络上的设备.我想向设备发送四个特定字节的数据,遗憾的是我似乎只能将字符串发送到设备.无论如何使用javascript发送原始二进制文件?

这是我用来执行POST的脚本,除非我在数据字段中放入一个字符串,否则它当前不会运行.有任何想法吗?

(function ($) {
   $.ajax({
      url: '<IP of Address>',
      type: 'POST',
      contentType: 'application/octet-stream',

      //data:'253,0,128,1',
      data:0xFD008001,

      crossDomain: true
   });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

javascript ajax binary hex

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

Number.prototype.toFixed:在Internet Explorer中非常正确

考虑以下:

var x = 2.175;
console.log(x.toFixed(2));  // 2.17
Run Code Online (Sandbox Code Playgroud)

什么?不,这并不奇怪.这是相当明显的,请参阅:数字文字2.175实际上存储在内存中(通过IEEE-754规则)作为一个稍微小于2.175的值.这很容易证明:

console.log(x.toFixed(20)); // 2.17499999999999982236
Run Code Online (Sandbox Code Playgroud)

这就是它在32位Windows设置的最新版Firefox,Chrome和Opera中的工作原理.但那不是问题.

真正的问题是Internet Explorer 6(!)实际上是如何设法完成的 像人类一样:

var x = 2.175;
console.log(x.toFixed(2));  // 2.18
console.log(x.toFixed(20)); // 2.17500000000000000000
Run Code Online (Sandbox Code Playgroud)

好吧,我过度使用了:实际上我测试过的所有Internet Explorer(IE8-11,甚至是MS Edge!)的行为方式都是一样的.还是,WAT?

更新:它变得陌生:

x=1.0;while((x-=0.1) > 0) console.log(x.toFixed(20));

IE                        Chrome
0.90000000000000000000    0.90000000000000002220
0.80000000000000000000    0.80000000000000004441
0.70000000000000010000    0.70000000000000006661
0.60000000000000010000    0.60000000000000008882
0.50000000000000010000    0.50000000000000011102
0.40000000000000013000    0.40000000000000013323
0.30000000000000015000    0.30000000000000015543
0.20000000000000015000    0.20000000000000014988
0.10000000000000014000    0.10000000000000014433
0.00000000000000013878    0.00000000000000013878
Run Code Online (Sandbox Code Playgroud)

为什么差异 - 除了最后一个?为什么最后一个没有区别?x=0.1; while(x-=0.01)...顺便说一下,它非常相似:直到我们非常接近零,toFixed在IE中显然试图削减一些角落.

免责声明:我知道,浮点数学是有点缺陷.我不明白的是IE和浏览器世界其他部分之间的区别.

javascript floating-point internet-explorer

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

为什么Text.splitText()会影响布局?

假设我们的页面中有一个段落,只有一个文本块.

<p>laborum beatae est nihil, non hic ab, deserunt repellat quas. Est molestiae ipsum minus nesciunt tempore voluptate laboriosam</p>
Run Code Online (Sandbox Code Playgroud)

在DOM方面,结构是:

HTMLParagraphElement
  Text [laborum beatae est nihil...]
Run Code Online (Sandbox Code Playgroud)

现在我们将它拆分Text.splitText()两次,分开"deserunt repellat quas.Est"片段.结构变成:

HTMLParagraphElement
  Text [laborum beatae est nihil...]
  Text [deserunt repellat quas. Est]
  Text [ molestiae ipsum minus nesciunt...]
Run Code Online (Sandbox Code Playgroud)

虽然此操作会影响DOM,但它永远不会在元素级别上更改它(Text!== Element),因此我预计不会有任何视觉上的变化.

然而,splitText()影响布局,在所有经过测试的浏览器(Chrome 60,Firefox 55,Edge 14 - 所有Windows 10操作系统)中触发重新布局和重新绘制.当我们调用时ParagraphElement.normalize(),会发生同样的情况,将Text节点的数量减少到1; 再次触发重新布局和重绘.

这有一个令人讨厌的副作用,可以在这个演示中看到.如果你检查'quas附近的话.Est',你看他们实际上改变了位置!

它在Firefox中清晰可见,并且在Chrome中更加微妙(但也可以区分).令我高兴的是,Edge中没有出现过这样的"单词舞".

这个重要的原因显示在这种(一种)匀场选择引擎的演示中.这个特定的版本在Firefox中不起作用(caretRangeFromPoint暂不支持- 唉!),但即使将"point2dom"重新加入caretPositionFromPoint突出显示的文本也会重新定位 - 在Chrome中也是如此,甚至更糟.再次,它似乎在Edge中运行良好. …

html javascript css dom

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

MySQL插入到DATETIME:使用ISO :: 8601格式是否安全?

在我们的项目中,我们使用Zend Framework Model生成器,它生成类似这样的东西,将存储在DB(MySQL)中的属性设置为DATETIME字段:

public function setObjectDatetime($data) {
  if (! $data instanceof Zend_Date) { ... some conversion code ... }
  $this->objectDatetime = $data->toString(Zend_Date::ISO_8601);
}
Run Code Online (Sandbox Code Playgroud)

所以ISO :: 8601格式的字符串(例如'2012-06-15T18:33:00 + 03:00')实际上是作为属性存储的.

当我们尝试使用save此模型并将此字符串传递给MySQL(版本5.5.16)时会出现问题:它会引发警告,但仍会使用正确的结果插入/更新相应的行.很容易检查问题是由MySQL引起的,而不是某些驱动程序的行为:只是发出这样的查询...

UPDATE table_name SET datetime_field = '2012-06-15T18:33:00+03:00' WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

......其结果将是1 row affected, 1 warning,与

1264 | Out of range value for column 'dt' at row 1

警告(显示SHOW WARNINGS).

对我来说,phpMyAdmin根本没有显示任何警告; 并且所有服务器端代码都将此查询作为实体查询处理.)

所以问题是:我们是否应该将我们在模型中存储的内容重新格式化为另一种字符串格式(例如'YY-MM-dd HH:mm:ss'?)或者它是否只是一些奇怪的MySQL行为将被修复迟早?

mysql datetime iso8601

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

Erlang中的匿名变量

从Erlang编译器的角度来看,下划线变量和以下划线开头的命名变量之间的确切区别是什么(除了向代码添加可读性之外)?

例如是__Var不同?

variables erlang

16
推荐指数
2
解决办法
2259
查看次数

调试$ digest已在进行中错误

我正在构建一个复杂的混合应用程序并且已经在真实设备上进行测试.偶尔,我$digest already in progress从Angular 那里得到了可怕的错误 - 特别是,它似乎是在一个有点长的消化周期之后.从堆栈跟踪看来,它似乎是从更新location.href的Angular defer函数启动的,然后触发fastclick以发送touchend,而touchend又触发导致错误的第二个摘要.有没有人遇到过同样的错误 - 如果有的话,你是怎么解决它的?

对于那些感兴趣的人,这是我在stacktrace中看到的:

Error: [$rootScope:inprog] $digest already in progress
http://errors.angularjs.org/1.3.0/$rootScope/inprog?p0=%24digest:
file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:80:32
beginPhase@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:14473:31
$apply@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:14220:21
file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:22523:29
eventHandler@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:3013:25
dispatchEvent@sendClick@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/fastclick/fastclick.js:295:30
onTouchEnd@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/fastclick/fastclick.js:589:18
file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/fastclick/fastclick.js:105:43
url@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:5022:19
setBrowserUrlWithFallback@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:11080:21
file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:11186:40
$eval@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:14123:28
$digest@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:13939:36
file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:14161:33
completeOutstandingRequest@file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:4877:15
file:///private/var/mobile/Containers/Bundle/Application/4040564A-5631-4A1A-B2FD-6E53F9A574F2/test.app/www/js/3rdparty/angular/angular.js:5250:33
Run Code Online (Sandbox Code Playgroud)

javascript angularjs hybrid-mobile-app fastclick.js

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

如何使用Knockout实现模糊时间日期替换器?

我想用jQuery实现这个插件的功能:https: //github.com/rmm5t/jquery-timeago

该插件的简短描述:

这将使所有abbr元素在标题中具有一类timeago和ISO 8601时间戳(符合日期时间设计模式微格式):

<abbr class="timeago" title="2011-12-17T09:24:17Z">December 17, 2011</abbr>
Run Code Online (Sandbox Code Playgroud)

进入这样的事情:

<abbr class="timeago" title="December 17, 2011">about 1 day ago</abbr>
Run Code Online (Sandbox Code Playgroud)

除了使用淘汰赛,我的标记看起来像这样:

<abbr data-bind="attr: { title: Posted }" class="timeago"></abbr>
Run Code Online (Sandbox Code Playgroud)

我认为有些事情没有同步,因为即使我把调用时间调整到了视图模型本身,也没有发生任何事情.我猜我需要一个附加到可观察的"发布"的订阅者,但我不知道如何设置它.

jquery knockout-2.0 knockout.js

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

为什么浮点数打印得如此不同?

大多数浮点数都没有精确存储(使用IEEE-754格式时),这是一种常见的知识.所以不应该这样做:

0.3 - 0.2 === 0.1; // very wrong
Run Code Online (Sandbox Code Playgroud)

......因为它会导致false,除非使用一些特定的任意精度的类型/类(BigDecimal的中的Java/Ruby的,bcmath时在PHP中,数学:: BigInt有/数学:: BigFloat在Perl,仅举几例)来代替.

但我想知道为什么当一个人尝试打印这个表达式的结果时0.3 - 0.2,脚本语言(PerlPHP)给出了0.1,但是"虚拟机"(Java,JavaScriptErlang)提供了更类似的东西0.09999999999999998呢?

为什么它在Ruby中也不一致?版本1.8.6(键盘)给出0.1,版本1.9.3(ideone)给出了0.0999...

javascript php ruby floating-point ieee-754

12
推荐指数
2
解决办法
1163
查看次数

如何链接多个条件承诺?

在我的代码中,我有条件任务,都返回一个承诺.我需要按顺序运行任务.

我目前的实现看起来像这样:

var chain = [];

if (/* some condition for task A */) {
    chain.push(function(doContinue){
        taskA().then(doContinue);
    });
}

if (/* some condition for task B */) {
    chain.push(function(doContinue){
        taskB().then(doContinue);
    });
}

if (/* some condition for task C */) {
    chain.push(function(doContinue){
        taskC().then(doContinue);
    });
}

var processChain = function () {
    if (chain.length) {
        chain.shift()(processChain);
    } else {
        console.log("all tasks done");
    }
};

processChain();
Run Code Online (Sandbox Code Playgroud)

这工作正常,但最初我一直在寻找一种方法,只使用Promises创建链,并链接所有函数使用.then,但我无法得到一个有效的解决方案.

如果有一种更简洁的方式只使用Promise和then电话链,那么我很乐意看到一个例子.

javascript promise

12
推荐指数
2
解决办法
5669
查看次数