许多编译器似乎只保留bool值中的0或1,但我不确定这将始终有效:
int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
Run Code Online (Sandbox Code Playgroud) 假设我有类似的东西
function animate(param)
{
// ...
if (param < 10)
setTimeout(function () { animate(param + 1) }, 100);
}
animate(0);
Run Code Online (Sandbox Code Playgroud)
这是否意味着函数的本地数据的每个实例都将保存在内存中,直到有效完成,即直到param达到10?
如果实例保存在内存中,有没有更好的方法呢?我知道,传递文本代码来setTimeout()
解决问题,但在我的情况下,函数参数中的对象不能轻易地表示为字符串.
一方面,如果我有
<script>
var s = 'Hello </script>';
console.log(s);
</script>
Run Code Online (Sandbox Code Playgroud)
浏览器将<script>
提前终止块,基本上我搞砸了页面.
另一方面,字符串的值可能来自用户(例如,通过先前提交的表单,现在字符串最终<script>
作为文字插入到块中),因此您可以期待该字符串中的任何内容,包括恶意形成的标签.现在,如果我在生成页面时使用htmlentities()转义字符串文字,则s的值将按字面包含转义的实体,即s将输出
Hello </script>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这不是所希望的行为.
在<script>
块中正确转义JS字符串的一种方法是,如果它遵循左尖括号,或者只是总是转义斜杠,则转义斜杠,即
var s = 'Hello <\/script>';
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.
然后是HTML事件处理程序中的JS代码问题,也可以很容易地解决,例如
<div onClick="alert('Hello ">')"></div>
Run Code Online (Sandbox Code Playgroud)
最初看起来有效但在大多数(或所有?)浏览器中断开.这显然需要完整的HTML实体编码.
我的问题是:正确覆盖上述所有情况的最佳/标准做法是什么 - 即脚本块中的JS,事件处理程序中的JS - 如果您的JS代码可以部分地在服务器端生成并且可能包含恶意数据?
我似乎无法定义类似的东西:
var a = {-1: 'Apple', -2: 'Orange'}
Run Code Online (Sandbox Code Playgroud)
我的Safari抱怨一个syntax error near '-'
.Parens也没有帮助,即{(-1): ...
- 在这种情况下,Safari不喜欢开放式的paren.
如果我想要键只是整数而不是字符串,那么构造一个关联数组的正确方法是什么?
我试图为弹性div实现一个简单的fold/unforld效果,即当元素的实际尺寸不是通过CSS设置时,因此不能轻易确定.所以我需要jQuery的width()和height()等价于任意元素; 方法应返回可分配给*.style.width/height的内容,以实现折叠/展开效果.这些方法也可以是设置者,但不一定是因为它无关紧要(或者不是吗?)
兼容性:IE8 +和3个适当的团队:Firefox,Chrome,Safari.除了"使用jQuery"之外,SO没有其他答案,我现在不想这样做.问题是我不需要支持像IE6/7和Netscape这样的古老浏览器.我希望我的代码只是简单的,适用于现代浏览器的首页JavaScript.删除IE9 for IE9也是一种选择.
我认为答案可能对许多Web开发人员有用.谢谢!
编辑:我当然理解,分析jQuery(以及丢弃古老的怪癖)是一个不错的选择,但我认为有人已经这样做并且可以与我们分享.
寻找允许从预定义集合中选择多个项目的UI元素实现,就像我们在这里的标记编辑器一样,在StackOverflow上的问题表单下面.
我甚至不知道这种控制的正确名称是google for it.多选?多编辑?
自动完成(和jQuery自动完成)并不是它,因为它只选择一个项目,尽管标签编辑器确实有自动完成作为辅助.
jQuery是可以的,虽然我更喜欢适用于现代浏览器的通用JavaScript:IE9 +和其他浏览器.
例如,如果我实现一些简单的对象缓存,哪种方法更快?
1. return isset($cache[$cls]) ? $cache[$cls] : $cache[$cls] = new $cls;
2. return @$cache[$cls] ?: $cache[$cls] = new $cls;
Run Code Online (Sandbox Code Playgroud)
我读某处@
需要花费大量时间才能执行(我想知道为什么),特别是在实际发出和禁止警告/通知时.isset()
另一方面,这意味着额外的哈希查找.哪个更好,为什么?
我确实希望在开发和生产服务器上全局保持E_NOTICE.
下面的代码段取自Apple的ObjC运行时(libobjc)源代码.我想知道这究竟意味着什么.(不是google-able,对不起)
// HACK -- the use of these functions must be after the @implementation
id bypass_msgSend_retain(NSObject *obj) asm("-[NSObject retain]");
void bypass_msgSend_release(NSObject *obj) asm("-[NSObject release]");
id bypass_msgSend_autorelease(NSObject *obj) asm("-[NSObject autorelease]");
Run Code Online (Sandbox Code Playgroud)
更新:
以下是对bypass_msgSend_release()的调用:
movl -4(%ebp), %eax
movl %eax, (%esp)
calll "-[NSObject release]"
Run Code Online (Sandbox Code Playgroud) 以下之间的本质区别是什么:
position: absolute;
top: 0;
height: 100%;
Run Code Online (Sandbox Code Playgroud)
和
position: absolute;
top: 0;
bottom: 0;
Run Code Online (Sandbox Code Playgroud) 类似于在这个MDN页面上描述的那个,但没有将文件加载到内存中,即我希望能够使用一些流接口以块的形式发送文件,以便我的客户端进程独立于文件大小.使用不可见<input type=file>
元素选择文件.
这是一个现实世界的问题:我的用户将一次上传多个文件,这可能足够大(并且客户端设备足够有限)担心内存消耗.与此同时,我想提供一个很好的客户端上传器,其中包含进度指示.
FileReader接口似乎不支持流式传输,除非我当然缺少一些东西.
该解决方案应该可以在最新版本的Safari,Chrome和Firefox中使用,如果可能的话也可以在IE9中使用(尽管可能没什么希望).编辑:也没有jQuery,只是简单的JavaScript.
javascript ×6
assembly ×1
boolean ×1
c ×1
c++ ×1
closures ×1
css ×1
element ×1
escaping ×1
file-upload ×1
filereader ×1
height ×1
html ×1
isset ×1
libobjc ×1
objective-c ×1
php ×1
width ×1