我最近发现了这段JavaScript代码:
Math.random() * 0x1000000 << 0
Run Code Online (Sandbox Code Playgroud)
我知道第一部分只是生成0到0x1000000(== 16777216)之间的随机数.
但第二部分似乎很奇怪.执行0位移位有什么意义?我不认为它会做任何事情.然而,经过进一步调查,我注意到0的偏移似乎截断了数字的小数部分.此外,无论是右移,左移,还是无符号右移,都无关紧要.
> 10.12345 << 0
10
> 10.12345 >> 0
10
> 10.12345 >>> 0
10
Run Code Online (Sandbox Code Playgroud)
我用Firefox和Chrome测试过,行为是一样的.那么,这个观察的原因是什么?它只是JavaScript的细微差别,还是也出现在其他语言中?我以为我理解了位移,但这令我感到困惑.
本周早些时候,我不得不做一些感觉违反语义的事情.让我解释.
我正在制作一个简单的AJAX客户端应用程序,它向具有给定数量参数的服务发出请求.由于整个应用程序基本上是只读的,我认为使用HTTP GET是可行的方法.我必须传递的一些参数很简单(例如排序顺序或页码).
但是,其中一个必需的参数可能是可变长度的,这让我很担心.由于我编写了GET请求的查询字符串中的所有参数,因此在我看来,这为请求URL设置了(大约)2000个字符的不必要的上限.无论如何,我不喜欢看到500个字符长的请求URL.
因此,由于POST请求没有这样的限制,我决定切换.但这感觉不对.我的印象是POST表示数据的修改 - 但我将它用于简单的只读请求.
有一个更好的方法吗?要执行GET,有多个参数?我听说过一种方法 - 你自己对参数进行初步POST ,然后执行GET.但是,这种技术还有很多不足之处.
但是从这个具体案例来看,HTTP请求方法的真正语义和局限是什么?为什么GET不支持任何类型的参数有效载荷?使用URL中的查询字符串对我来说几乎感觉像是一个黑客.
我有一个使用IIS Express在我的XP系统上本地运行的ASP.NET站点.在Windows服务器上运行该站点的实时版本.
在网页中,Javascript通常会使用样式在页面上引用表单document.formName
,其中formName
是表单的名称.据我所知,这是一个跨浏览器的方法,随着document.forms.formName
和document.forms[0]
等等.
在我的本地开发站点上,引用document.frm1
(我知道,错误的命名实践)错误; 它是未定义的.另一方面,document.forms.frm1
工作正常.奇怪的是,这不会发生在服务器上,尽管两个页面都是相同的代码.我用Firebug和IE8和Firefox 6进行了双重检查.
另一个奇怪的部分:使用Firebug进行检查,document.frm1
未定义,但document.frmClose
(另一种形式)存在!咦?
以前有人经历过吗?
在Code Complete中的"Good Encapsulation"部分中,建议隐藏私有实现细节.C++中给出了一个例子.这个想法基本上是将接口与实现完全分开,即使在类级别也是如此.
class Employee {
public:
...
Employee( ... );
...
FullName GetName() const;
String GetAddress() const;
private:
EmployeeImplementation *m_implementation;
};
Run Code Online (Sandbox Code Playgroud)
这真的很好用吗?这不仅效率低下(这会带来什么样的性能损失?),但Code Complete("管理复杂性")的整个座右铭似乎已经被逆转 - 这不会增加复杂性吗?
Lua有内置sum()
功能吗?我似乎无法找到一个,我几乎无处不在文档中.或许table.sum()
,或类似的东西,遵循当前的约定.但由于我找不到它,我必须实现它:
function sum(t)
local sum = 0
for k,v in pairs(t) do
sum = sum + v
end
return sum
end
Run Code Online (Sandbox Code Playgroud)
但是,实现这么简单的事情似乎很有趣.是否存在内置函数?
在搜索这个问题的答案时,我在StackOverflow上找到了这篇热门帖子.不幸的是,它并没有完全奏效.问题是:
有没有办法在执行修改(例如INSERT
)之前检查表(或另一个对象)的存在?前面提到的帖子暗示:
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'questionableTable'))
BEGIN
INSERT INTO dbo.questionableTable VALUES ('success!');
END
Run Code Online (Sandbox Code Playgroud)
错误: Invalid object name 'dbo.questionableTable'.
这个问题是SQL Server在解析INSERT
语句时失败,说明它dbo.questionableTable
不存在.以前的INFORMATION_SCHEMA
检查似乎不会影响它.
有没有办法写这种查询?特别是对于SQL Server.但是,如果存在这样的事情,我还希望看到其他数据库系统的类似操作.
这个问题背后的动机是因为我们有多个数据库,其中包含彼此表的子集.我想要的是有一个可以应用于所有数据库的脚本,并且只修改了那里存在的表(并且在执行时不会出错).
每当 HG 需要提示提交消息或其他任何内容时,它都会打开记事本。这很烦人。我安装了Vim7.3,并尝试将EDITOR
环境变量设置为指向gvim,但无济于事。
我正在使用 PowerShell,但我尝试在 PowerShell 和 cmd 中进行测试。他们都坚持使用记事本。
理想情况下,它是以下变体:
:/somesearchstring/ norm! dd
Run Code Online (Sandbox Code Playgroud)
以上搜索字符串并执行正常模式命令(在这种情况下,删除该行).问题是,这只会在第一次出现搜索时执行命令.如何对搜索结果执行任意命令?
1523到10503之间的奇数之和是多少?提示:写一个while循环来累积总和并打印它.然后复制并粘贴该总和.为了最大限度地学习,使用范围也可以使用for循环.
我尝试了什么.我需要将总和打印出来.我的答案给了我个人跑步.
i=1523
while i<10503:
sum=0
i=i+2
sum=sum+i
print(sum)
for i in range(1523,10503):
print(i+2)
Run Code Online (Sandbox Code Playgroud) 定义JavaScript调用时,如下所示:
<input type="button" onclick="someJavaScriptFunction" />
Run Code Online (Sandbox Code Playgroud)
写实际通话的最佳方式是什么?我见过很多方法:
javascript:someJavascriptFunction();
Run Code Online (Sandbox Code Playgroud)
要么
justSomeJavaScriptFunction();
Run Code Online (Sandbox Code Playgroud)
要么
withoutTheSemicolon()
Run Code Online (Sandbox Code Playgroud)
任何方法都有任何好处或警告吗?我意识到addEventListener
在某些情况下使用更灵活.