今天我在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中,新的(建议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)
但这样做的目的是什么?
提前致谢 :)
我正在开发一个ng2应用程序,我正在努力解决问题.我建立一个日历,您可以选择一个日期范围,我需要作出反应上click与mouseenter/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的点击做出反应在月的代码中."
所以,我的问题是,有更好的方法吗?或者我是否正在尝试解决一个我不应该再费心解决的问题,因为用户的设备每天都会获得越来越多的内存/处理能力?
提前致谢!