我已经看到了两种检测UA是否实现特定JS属性的方法:if(object.property)
和if('property' in object)
.
我想听听哪些更好,更重要的是为什么的意见.一个明显优于另一个吗?是否有不仅仅是这两种方法来进行对象属性检测?请涵盖浏览器支持,陷阱,执行速度等,而不是美学.
编辑: 鼓励读者在jsperf.com/object-detection上运行测试
为了简单起见并避免命名冲突,我一直在我的记录资源中捆绑链接......
{
id: 211,
first_name: 'John',
last_name: 'Lock',
_links: [
{ rel: 'self', href: 'htttp://example.com/people/211' }
]
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何在集合中实现链接.我花了很长时间在网上搜寻一些例子,除了使用不那么精益的HAL,我无法调和我的问题.
[
{id:1,first_name:.....},
{id:2,first_name:.....},
{id:3,first_name:.....},
"_links": "Cant put a key value pair here because its an-array"
]
Run Code Online (Sandbox Code Playgroud)
这意味着我必须将数组包装在容器对象中.
[
people: [ {id:1,first_name:.....} ],
links: [ { rel:parent, href:.... ]
]
Run Code Online (Sandbox Code Playgroud)
但是与单数资源不同,所以我要使记录表现得像集合并将其包装在一个容器中....
{
person: {
id: 211,
first_name: 'John',
last_name: 'Lock',
_links:
},
links:[
{ rel: 'self', href: 'htttp://example.com/people/211' }
]
}
Run Code Online (Sandbox Code Playgroud)
从表面上看,这似乎是一个非常简洁的解决方案.由此产生的JSON更深一层,但HATEOAS已经实现,所以这一切都很好吗?一点也不.当我回到收藏品时,真正的刺痛来了.既然单个资源已经包装在容器中以便与集合保持一致,那么现在必须更改集合以反映更改.这就是丑陋的地方.十分难看.现在这个系列看起来像这样......
{
"people": [
{
"person": {
....
}, …
Run Code Online (Sandbox Code Playgroud) 我看到我们可以写:
<form method="link" action="foo.html" >
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
制作"链接按钮".
但我知道我们可以写:
<a href="foo.html" ><input type="button" /></a>
Run Code Online (Sandbox Code Playgroud)
哪个会做同样的事情.
有什么不同?他们的浏览器兼容性是什么?
我有一个最近开始使用版本控制的项目.
这个项目有一个较旧的尝试,代码完全不同,我想为后代添加版本控制,但它既不是祖先也不是当前master
分支的初始提交的后代.
我希望为此创建一个新的并行分支,没有以前的历史记录(即有多个"初始提交".这是否可以使用Git而不必创建第二个存储库?提交树看起来像这样:
o---o---o master
\
o---o branch
o old implementation
Run Code Online (Sandbox Code Playgroud)
这样我就可以简单地git checkout old
用来访问代码了.90天后垃圾收集器不得清理它,并且可以选择标记.
我负责维护和扩展从2007年开始并使用原始mysql
模块的PHP代码库.所有的用户输入是用铸造为预计数值转义,mysql_real_escape_string()
使用单引号的字符串,可能正在通过进一步过滤引述in_array()
为ENUM
字段或array_intersect()
用于SET
字段.然后,所有无约束的字符串字段都会通过输出HTML htmlspecialchars()
或htmlentities()
输出HTML.如果值表示外键,则首先验证该键是否存在.
我相信通过严格遵循这些程序,该应用程序可以防止注入和其他形式的攻击.(奖励积分:我是否正确?如果没有,我错过了什么?)
将此应用程序转换为mysqli
PDO将是一项相当大的任务(并且,为避免意外破坏,我不希望自动化).最后我的问题是:在使用旧mysql
模块时是否存在无法缓解的特定漏洞,这需要迁移到较新的模块?
赏金信息:
为了清楚起见,我希望有一个CVE编号列表或来自PHP开发人员的声明,该mysql
模块将针对所有已知漏洞进行补丁.我也假设在使用模块后遵循最佳实践并不会让我接触到额外的攻击向量.BCP在将数据插入新语句之前已经包含从数据库中获取的数据.继续谈论这个并没有真正解决这个问题.
我有兴趣将我的Flow代码切换到strict
类型检查,但我有一些低级实用程序函数,通常用于处理对象,例如:
// @flow strict
const hasKey = (o: Object): (string => boolean) =>
Object.prototype.hasOwnProperty.bind(o);
const union = (os: Array<Object>): Object =>
os.reduceRight((acc, o) => ({ ...acc, ...o }), {});
Run Code Online (Sandbox Code Playgroud)
由于在严格模式下不允许使用Object类型,因此如何为明确应该在任何通用Object上操作的函数声明类型?
每个Web应用程序 - 每个Web站点 - 都是一项服务.(...)使网站易于使用的网站功能也使网络服务API易于程序员使用.
Richardson和Ruby,"RESTFul Web Services"
根据我的意图,一个也是Web服务的Web站点提供其资源的多种表示,具体取决于用户代理请求的内容.可以这么说的API是网站本身,不是单独提供的.
对于许多流行的"REST API"而言,情况并非如此.例如,Twitter的API位于http://api.twitter.com/1/,URI中的"1"是API本身的版本.Socialcast还在https://demo.socialcast.com/api/上提供了REST API ,第三级名称是它所处理的网络的名称.
这对我来说似乎不对.如果我的博客位于http://www.example.com/blog,我不需要在其他位置提供API,仅为机器人提供JSON.而不是http://www.example.com/blog/posts/和http://api.example.com/blog/posts,两个不同的URI,我应该只有前者,并且可以使用多种表示,其中application/json
对于我希望提供给我的用户的JSON API.
示例1:浏览器询问我博客上的帖子;
请求:
curl -i \
-H "Accept: text/html" \
-X GET \
http://www.example.org/blog/posts/
Run Code Online (Sandbox Code Playgroud)
响应:
200 OK
Content-Type: text/html; charset=utf-8
<html><body><h1>Posts</h1><ol><li><h2>My first post ...
Run Code Online (Sandbox Code Playgroud)
示例2:相同的URI,但这次机器人发出请求;
请求:
curl -i \
-H "Accept: application/json" \
-X GET \
http://www.example.org/blog/posts/
Run Code Online (Sandbox Code Playgroud)
响应:
200 OK
Content-Type: text/html; charset=utf-8
{
"posts": [
{
"id": 1,
"title": "My first …
Run Code Online (Sandbox Code Playgroud) 现在是星期五下午*,我的大脑已停止工作了.通常是我在回答这样愚蠢的SQL问题,对不起!
我试图获得一个表,以及另一个表的列的最高值,通过LEFT JOIN将后者加入前者.
SELECT
jobs.*,
MAX(notes.`timestamp`) AS complete_date
FROM jobs
LEFT JOIN notes ON (jobs.id=notes.job_id)
WHERE (jobs.status="complete" OR jobs.status="closed")
AND (notes.type="complete" OR notes.type IS NULL)
GROUP BY jobs.id
ORDER BY complete_date ASC
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得符合...标准的所有工作,WHERE jobs.
如果他们有一个,那么type=complete
与该工作相关的最新注释的时间戳:
Job ID Complete Date
1 today
2 NULL
4 yesterday
Run Code Online (Sandbox Code Playgroud)
作业3不会出现,因为它不符合jobs.status
标准.但我真正得到的是:
Job ID Complete Date
1 today
4 yesterday
Run Code Online (Sandbox Code Playgroud)
缺少作业2,即JOIN的作用类似于INNER JOIN.
我确信这只是我有一个脑死亡的时刻,但我不明白为什么我的LEFT(OUTER)JOIN不会给我所有的工作,无论注意的价值.
具体来说,用户可以删除备注,因此可能完整/已关闭的作业可能没有type=complete
备注(当状态更改时输入备注),我试图抓住用户关闭作业的情况,添加备注,然后删除笔记.
*在东方的某个地方
PHP 中是否有规范的方法来执行此操作(Java 问题): Locale: Language name to Country / Language code
这个问题与以下问题相反: 将 iso-639 代码转换为语言名称的标准函数?
即,从字符串转换为French
代码fr
? 该机制只需要支持英文源字符串,我想避免创建自己的转换列表,如本答案所示:https : //stackoverflow.com/a/20520458/760706
我正在考虑Locale::getLocaleCodeForDisplayLanguage("French", "en")
不存在的问题。
我对这个问题基本上有相反的问题:如何在注入DOM时阻止iframe加载?
我希望加载一个IFRAME
未注入DOM 的元素.
我试图通过javascript打印页面.目标是避免导航链接,发出打印命令和导航回来.
我有jQuery可供我使用.
// fake table that illustrates pertanent DOM
<table class=diary><tr><td data-job=12345 contextmenu=job_menu><a href=/jobs/12345>view job 12345</a></table>
// real code
<menu type="context" id="job_menu">
<menuitem label="Print Job" onclick="PrintJob(); return false;"></menuitem>
</menu>
<script type="text/javascript">
var target = null;
function PrintJob()
{
var job_no = $(target).data('job');
if(job_no > 0) {
$('<iframe name="printjob" src="/jobs/'+job_no+'">').load(function () {
this.focus();
this.print();
})
.trigger('load');
}
}
$('.diary').bind('contextmenu', function (ev) {
var td = ev.target;
while(td && td.nodeName != 'TD')
td = td.parentNode;
target …
Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据库:
+----------+----------+------+
| username | password | time |
+----------+----------+------+
| a | b | 1234 |
| c | d | 5678 |
| e | f | 9012 |
+----------+----------+------+
Run Code Online (Sandbox Code Playgroud)
现在我必须按时间安排,所以我跑了:
mysql_query("SELECT * FROM `table` ORDER BY `time`")
Run Code Online (Sandbox Code Playgroud)
这向我显示了按时间升序排列的行,但我必须仅获取用户名c
,e
或者我必须从查询中获取最后两行。
我努力了:
mysql_query('SELECT * FROM `table` ORDER BY `time` LIMIT 2')
Run Code Online (Sandbox Code Playgroud)
但这显示了我的用户名a
,c
但我必须获取最后两个,该怎么做?