小编moj*_*uba的帖子

在对int进行类型转换时,C/C++ bool类型总是保证为0或1吗?

许多编译器似乎只保留bool值中的0或1,但我不确定这将始终有效:

int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
Run Code Online (Sandbox Code Playgroud)

c c++ boolean

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

JavaScript中的递归闭包

假设我有类似的东西

function animate(param)
{
    // ...
    if (param < 10)
        setTimeout(function () { animate(param + 1) }, 100);
}

animate(0);
Run Code Online (Sandbox Code Playgroud)

这是否意味着函数的本地数据的每个实例都将保存在内存中,直到有效完成,即直到param达到10?

如果实例保存在内存中,有没有更好的方法呢?我知道,传递文本代码来setTimeout()解决问题,但在我的情况下,函数参数中的对象不能轻易地表示为字符串.

javascript closures

36
推荐指数
2
解决办法
4357
查看次数

在<script>块中的JavaScript字符串文字中转义HTML实体

一方面,如果我有

<script>
var s = 'Hello </script>';
console.log(s);
</script>
Run Code Online (Sandbox Code Playgroud)

浏览器将<script>提前终止块,基本上我搞砸了页面.

另一方面,字符串的值可能来自用户(例如,通过先前提交的表单,现在字符串最终<script>作为文字插入到块中),因此您可以期待该字符串中的任何内容,包括恶意形成的标签.现在,如果我在生成页面时使用htmlentities()转义字符串文字,则s的值将按字面包含转义的实体,即s将输出

Hello &lt;/script&gt;
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代码可以部分地在服务器端生成并且可能包含恶意数据?

html javascript escaping

26
推荐指数
1
解决办法
3万
查看次数

带有负int键的JavaScript assoc数组

我似乎无法定义类似的东西:

var a = {-1: 'Apple', -2: 'Orange'}
Run Code Online (Sandbox Code Playgroud)

我的Safari抱怨一个syntax error near '-'.Parens也没有帮助,即{(-1): ...- 在这种情况下,Safari不喜欢开放式的paren.

如果我想要键只是整数而不是字符串,那么构造一个关联数组的正确方法是什么?

javascript

19
推荐指数
3
解决办法
5827
查看次数

没有jQuery的现代浏览器的width()和height()

我试图为弹性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(以及丢弃古老的怪癖)是一个不错的选择,但我认为有人已经这样做并且可以与我们分享.

javascript height element width

9
推荐指数
1
解决办法
5313
查看次数

任何开源标签编辑器,就像SO一样?

寻找允许从预定义集合中选择多个项目的UI元素实现,就像我们在这里的标记编辑器一样,在StackOverflow上的问题表单下面.

我甚至不知道这种控制的正确名称是google for it.多选?多编辑?

自动完成(和jQuery自动完成)并不是它,因为它只选择一个项目,尽管标签编辑器确实有自动完成作为辅助.

jQuery是可以的,虽然我更喜欢适用于现代浏览器的通用JavaScript:IE9 +和其他浏览器.

javascript user-interface

9
推荐指数
1
解决办法
886
查看次数

哪个在PHP中更好:用'@'抑制警告或用isset()运行额外的检查?

例如,如果我实现一些简单的对象缓存,哪种方法更快?

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.

php isset

9
推荐指数
4
解决办法
1265
查看次数

为什么这个内联汇编在libobjc中调用release,retain和autorelease?

下面的代码段取自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)

assembly objective-c inline-assembly libobjc

8
推荐指数
1
解决办法
230
查看次数

CSS:高度:100%对比底部:0

以下之间的本质区别是什么:

position: absolute;
top: 0;
height: 100%;
Run Code Online (Sandbox Code Playgroud)

position: absolute;
top: 0;
bottom: 0;
Run Code Online (Sandbox Code Playgroud)

css

7
推荐指数
1
解决办法
2422
查看次数

具有流式传输的JS文件上传器,即无需将整个文件加载到内存中

类似于在这个MDN页面上描述的那个,但没有将文件加载到内存中,即我希望能够使用一些流接口以块的形式发送文件,以便我的客户端进程独立于文件大小.使用不可见<input type=file>元素选择文件.

这是一个现实世界的问题:我的用户将一次上传多个文件,这可能足够大(并且客户端设备足够有限)担心内存消耗.与此同时,我想提供一个很好的客户端上传器,其中包含进度指示.

FileReader接口似乎不支持流式传输,除非我当然缺少一些东西.

该解决方案应该可以在最新版本的Safari,Chrome和Firefox中使用,如果可能的话也可以在IE9中使用(尽管可能没什么希望).编辑:也没有jQuery,只是简单的JavaScript.

javascript file-upload filereader

6
推荐指数
1
解决办法
3062
查看次数