javascript正确匹配换行符

根据文档匹配换行符的方式应该是\r\n,实测却无效,原因是换行符在各系统下的匹配都是不一致的。

  • windows \r 匹配换行
  • *unix \r\n 匹配换行
  • mac \n 匹配换行

所以最终的写法应该是\r\n|\r|\n

P.S:截图是我常用的匹配工具,找到几款在线的正则匹配都无法高亮换行和溢出,顺手修复BUG还联系不上作者就先放到的自己的空间了。

http://think2011.net/regex-tester/

今天把自己给坑了,在大型项目中,你能看出来坑在哪里吗?

以下情况,#demo1 永远不会变色,知道为什么吗?

这个把我坑惨了,在复杂的构造函数中很难找出原因,也说明了基础很重要,哦不,实战更重要。

coffee版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test1
    constructor: (el) ->
        @el   = el
        @set1()
        @set2()
        
    set1: ->
        p = """<p>这是一个测试</p>"""
        document.body.innerHTML += p
        
    set2: ->
        @el.style.background = 'blue'
        
demo1 = new Test1 document.querySelector('#demo1')

阅读全文

前后端coffeescript解析效率测试

概述

  • 觉得总是引用编译后的coffeescript很麻烦,而且文件有些累赘。
  • 所以打算直接引用coffeescript试试。
  • 这是一个简单的测试,目的是衡量选择效率还是选择时间。

测试代码(节选)

前端

1
2
for (var i = 0; i <= 10000000; i++) {}
document.write('前端javascript运行时间:' + (Date.now() - window.timestamp) + '毫秒');
1
2
3
4
i = 0
while i <= 10000000
    i++
document.write "前端coffeescript运行时间:#{(Date.now() - window.timestamp)}毫秒"

阅读全文

directive中的transclude里的scope BUG

概述

恩,这个标题起的很有逻辑的样子 :D
直接来看一小段代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// html
<body ng-controller="appCtrl">
 <blue-label>
   我是在 transclude 里的 a: 
   <br />
   <input type="text" ng-model="a">
  </blue-label>
  
  我是在 外面 里的 a: 
</body>

// javascript
var appModule = angular.module('app', []);

appModule.directive('blueLabel', function() {
    return {
        restrict: 'E',
        template: '<div style="background:skyblue;"><span ng-transclude></span></div>',
        transclude: true
    };
});

appModule.controller('appCtrl',function($scope) {
    $scope.a = '初始化内容';
});

可能你会认为 scope.a 要么就是在directive里,要么就是在controller里,可事实有点诡异。

  • controller把 scope.a 初始化了。
  • scope.a 却在directive里(不确定),未与controller同步。

阅读全文