我最近获得了这段javascript(作为jQuery函数的一部分)......
var h = "innerHeight" in window ? window.innerHeight : document.documentElement.offsetHeight;
var w = "innerWidth" in window ? window.innerWidth : document.documentElement.offsetWidth;
我以前从未见过"innerHeight" in
,我找不到任何解释,或者为什么使用它。 (在Google上搜索单词in
并不是很有帮助。)
是jQuery语法吗?
答案 0 :(得分:5)
不,the in
operator是核心JavaScript。
如果右侧的对象具有名称与左侧字符串匹配的属性,则它将解析为true
。
请参阅a simple example:
var foo = {
a: 1,
b: undefined
}
var o = document.getElementById('output');
o.innerHTML = ("a" in foo) + "<br>" +
("b" in foo) + "<br>" +
("c" in foo) + "<br>";
答案 1 :(得分:2)
这是纯粹的JS。
这与object.property
类似,略有不同。
object.property
将在未设置属性的情况下失败,并且在已将其设置为某个错误值的情况下也将失败,例如undefined,null,0等
property in object
略胜一筹,因为它没有找到它的价值。
答案 2 :(得分:2)
检查对象的属性是否存在。
in
用于检查对象是否包含特定属性,这是由字符串提供的。
var obj={a:1,b:2}
// in
console.log('a' in obj); // true
console.log('c' in obj); // false
说...有更快/更短的方法。
// this does not work if the property's value is 0,null,undefined,false...
console.log(!!obj.a); // true
console.log(!!obj.c); // false
<强>演示强>
在您的情况下,更好的解决方案是:
var H=window.innerHeight?window.innerHeight:document.documentElement.offsetHeight
甚至更好:
var H=window.innerHeight||document.documentElement.offsetHeight
理论上window.innerHeight
可能是0
,所以此时它会尝试获取document.documentElement.offsetHeight
whitch返回undefined
,你应该添加另一个或||0
返回0
而不是undefined
。但这不会发生;)。
将window.innerHeight
放在document.documentElement.offsetHeight
前加速检查,因为window.innerHeight
是标准的,因此这是正确选择的可能性更高。
答案 3 :(得分:0)
您可以将其视为innerHeight <inside> window
,然后window
....