小编Mic*_*zyk的帖子

为什么parseInt('dsff66',16)返回13?

今天我在JavaScript中偶然发现了一个奇怪的(在我看来)案例.我将非十六进制字符串传递给parseInt函数,其基数为16,并且...得到了结果.我希望函数抛出某种异常或至少返回NaN,但它成功解析它并返回一个int.

我的电话是:

var parsed = parseInt('dsff66', 16); // note the 's' in the first argument
document.write(parsed);
Run Code Online (Sandbox Code Playgroud)

结果是:13.

我注意到它"停止"解析第一个不属于第二个参数中指定的数字系统的字符,所以调用parseInt('fg',16)我会得到15结果.

在我看来,它应该返回NaN.任何人都可以向我解释为什么不呢?为什么有人希望这个函数表现得像这样(即使它不是传递的字符串的精确表示,也返回一个整数)?

javascript parseint

27
推荐指数
4
解决办法
2656
查看次数

新的JavaScript"Symbol"数据类型有哪些可能的使用方案?

我只是偶然在JavaScript中,新的(建议ES6,但在Firefox,Chrome和歌剧已经实施)数据类型的文档时Symbol:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol http://people.mozilla.org/~jorendorff/es6-draft.html#sec-symbol-objects

我正在读它,但我想不出可能的使用场景.

文件说:

符号是唯一且不可变的数据类型,可用作对象属性的标识符.

好的,好吧,假设我按照文档说的那样做:

obj[Symbol("a")] = "a";
Run Code Online (Sandbox Code Playgroud)

但是,因为符号('a')总是返回唯一值(对象),并且:

迭代中的符号在...中不可见.

我如何从中检索我的财产obj

var obj = { normalProperty: 'just a string' };
obj[Symbol('a')] = 'a';

document.getElementById('retrieve').addEventListener('click', function() {
  document.write('Stringified object:' + JSON.stringify(obj) + '<br/><br/>');
  document.write('Trying to get Symbol-property value, aaaand...: <br/>');
  document.write(obj[Symbol('a')]); // undefined
}, false);
Run Code Online (Sandbox Code Playgroud)
<button id="retrieve">Retrieve obj's property</button>
Run Code Online (Sandbox Code Playgroud)

编辑

当然,您可以像这样检索它:

var x = Symbol('a');
obj[x] = 'a';
obj[x]; // "a"
Run Code Online (Sandbox Code Playgroud)

但这样做的目的是什么?

提前致谢 :)

javascript types symbols

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

Angular2中的事件代表团

我正在开发一个ng2应用程序,我正在努力解决问题.我建立一个日历,您可以选择一个日期范围,我需要作出反应上clickmouseenter/mouseleave上一天的细胞活动.所以我有一个像这样的代码(简化):

calendar.component.html

<month>
    <day *ngFor="let day of days" (click)="handleClick()" 
         (mouseenter)="handleMouseEnter()" 
         (mouseleave)="handleMouseLeave()" 
         [innerHTML]="day"></day>
</month>
Run Code Online (Sandbox Code Playgroud)

但是这给了我数百个独立的事件监听器在浏览器的内存中(每天的单元格获得3个事件监听器,我一次最多可以显示12个月,因此它将超过1k的监听器).

因此,我希望使用名为"事件委托"的方法"正确的方式".我的意思是,在父组件(month)上附加一个click事件,当它收到一个click事件时,只需检查它是否在Day组件上发生- 然后我就会对这个点击作出反应.当你传递参数时,像jQuery这样的东西在on()方法中selector.

但我是通过在处理程序代码中原生地引用DOM元素来实现的:

month.component.ts

private handleClick(event) {
    if (event.target.tagName === 'DAY') {
        // handle day click
    } else {
        // handle other cases
    }
}
Run Code Online (Sandbox Code Playgroud)

我的同事拒绝了我的想法,因为 - 正如他们所说的那样 - "在NG2中必须有一种更简单,更恰当的方法来处理这个问题;就像在jQuery中一样.此外,它在这里失控 - 你对Day的点击做出反应在月的代码中."

所以,我的问题是,有更好的方法吗?或者我是否正在尝试解决一个我不应该再费心解决的问题,因为用户的设备每天都会获得越来越多的内存/处理能力?

提前致谢!

javascript typescript angular2-template angular

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