Javascript 这怎么会是错误的?
当我单步执行此代码时,图中的值会导致cssLoaded=0;从我所看到的,长度大于0,并且cssStylesheet.sheet具有属性,因此应该为true,因此cssLoaded应该设置为1,但是它没有发生。我一定是错过了什么Javascript 这怎么会是错误的?,javascript,if-statement,Javascript,If Statement,当我单步执行此代码时,图中的值会导致cssLoaded=0;从我所看到的,长度大于0,并且cssStylesheet.sheet具有属性,因此应该为true,因此cssLoaded应该设置为1,但是它没有发生。我一定是错过了什么 function _cssIsLoaded(cssStylesheet, stylePath) { var cssLoaded = 0; if (tryCount == 3){ console.log('oops'); } if (cssStylesheet.h
function _cssIsLoaded(cssStylesheet, stylePath) {
var cssLoaded = 0;
if (tryCount == 3){
console.log('oops');
}
if (cssStylesheet.href == stylePath){
try {
if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules.length > 0 ){
cssLoaded = 1;}
else if ( cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText.length > 0 ){
cssLoaded = 1;}
else if ( cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0 ){
cssLoaded = 1;}
}
catch(ex){ }
}
if(cssLoaded) {
//alert('cssloadedcomplete');
resetPops();
$('#video-overlay').show();
positionElements();
saveBizzmail();
console.log('try:' + tryCount)
} else {
tryCount+=1;
console.log('try:' + tryCount);
setTimeout(function() { this._cssIsLoaded(cssStylesheet); }, 2000);
}
}
您必须检查元素是否存在,否则可能会发生错误(
cssStylesheet.sheet
isundefined
)。在以下情况下,表达式的计算结果将为false:
- 变量不存在(
,undefined
,null
)void 0
- 等于
(零)0
- 等于
false
- 等于空字符串(
,“”
)“”
- 非数字值(
,0/0
)NaN
{}
的计算结果为true,因为它是一个对象
另一个例子:
if(window.addEventListener) window.addEventListener("load", function(){}, true);
else if(window.attachEvent) window.attachEvent("onload", function(){});
else window.onload = function();
如果If条件不存在,代码将在IE的旧版本中抛出一个错误,该版本没有名为
窗口的方法。addEventListener
前一个检查确保您避免出现类似NPE的情况(通过检查cssStylesheet.sheet
不为空).您的代码有三种可能的方式获得cssladed==0
if(cssStylesheet.href==stylePath)
的计算结果为false
if/else
语句的计算结果均为false
if/else
语句引发异常,因此另一个if/else
语句不会执行if/else
语句(您甚至不再需要try/catch,因为它允许您的代码绕过某些测试):
是否满足以下条件:
if(cssStylesheet.href==stylePath){
pass?cssStylesheet.sheet的计算结果是什么?@jasonbar哇..是的。就像一匹戴着眼罩的马!p那样做了!很有意义..不过,我的主要问题是,为什么在上述情况下两者或其中一个都是“假”的。另一个问题没有真正的关联..只是意识流..我把它删掉了。如果,其中一个:“是否存在cssStylesheet.sheet
?”如果,两个:“是cssStylesheet.sheet.cssRules
的长度属性大于0”?如果一个和两个为真,则计算表达式。第一个表达式用于防止JavaScript错误,第二个表达式是特定的函数逻辑。
function _cssIsLoaded(cssStylesheet, stylePath) {
var cssLoaded = 0;
if (tryCount == 3){
console.log('oops');
}
if (cssStylesheet && cssStylesheet.href == stylePath) {
if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules && cssStylesheet.sheet.cssRules.length > 0 ) {
cssLoaded = 1;
}
else if ( cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText && cssStylesheet.styleSheet.cssText.length > 0 ) {
cssLoaded = 1;
}
else if ( cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0 ) {
cssLoaded = 1;
}
}
if(cssLoaded) {
//alert('cssloadedcomplete');
resetPops();
$('#video-overlay').show();
positionElements();
saveBizzmail();
console.log('try:' + tryCount)
} else {
tryCount+=1;
console.log('try:' + tryCount);
setTimeout(function() { this._cssIsLoaded(cssStylesheet); }, 2000);
}
}