1,页面打开缓慢,浏览器左下角显示
这是因为等待fonts.useso.com导致打开缓慢
这是360提供的公共库,因为谷歌大陆的公共库恢复了,360停止服务了,更换成谷歌的即可。
方法一:搜索:fonts.useso.com 找到这行代码:
把fonts.useso.com替换为fonts.googleapis.com
最好是用工具对整个项目的文件夹搜索一遍把fonts.useso.com全部替换为fonts.googleapis.com。
方法二:下载字体资源保存到本地,从自己服务器加载调用
2,try catch (js)异常处理
有时候会发现页面会报这样的错
这是因为谷歌撤离了国内,导致有些资源或者功能无法加载,如这里是jquery.js(bootstrap)的若干行代码报错
f12通过console找到报错代码的位置,用try catch进行异常代码处理(前提是报错的代码不能删又没有用处,如果是有用代码,那必须在catch里写入处理错误的程序代码),这里非有用代码,打印出来看看,不让其前台报错即可
JavaScript 测试和捕捉
try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
语法
try { //在这里运行代码 } catch(err) { //在这里处理错误 }
实例
在下面的例子中,我们故意在 try 块的代码中写了一个错字。
catch 块会捕捉到 try 块中的错误,并执行代码来处理它。
<!DOCTYPE html>
<html>
<head>
<script>
var txt="";
function message()
{
try
{
adddlert("Welcome guest!");
}
catch(err)
{
txt="There was an error on this page.\n\n";
txt+="Error description: " + err.message + "\n\n";
txt+="Click OK to continue.\n\n";
alert(txt);
}
}
</script>
</head>
<body>
<input type="button" value="View message" οnclick="message()">
</body>
</html>
Throw 语句
throw 语句允许我们创建自定义错误。
正确的技术术语是:创建或抛出异常(exception)。
如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
语法
throw exception
异常可以是 JavaScript 字符串、数字、逻辑值或对象。
实例
本例检测输入变量的值。如果值是错误的,会抛出一个异常(错误)。catch 会捕捉到这个错误,并显示一段自定义的错误消息:
<script> function myFunction() { try { var x=document.getElementById("demo").value; if(x=="")throw "empty"
; if(isNaN(x))throw "not a number"
; if(x>10)throw "too high"
; if(x<5)throw "too low"
; } catch(err) { var y=document.getElementById("mess"); y.innerHTML="Error: " + err + "."; } } </script> <h1>My First JavaScript</h1> <p>Please input a number between 5 and 10:</p> <input id="demo" type="text"> <button type="button" οnclick="myFunction()">Test Input</button> <p id="mess"></p>
使用 try…catch…finally 执行例外处理
在JavaScript中,我们使用try…catch…finally语句来执行例外处理,即通过它来捕捉错误发生后导致的例外或者执行throw语句产生的例外。它的基本语法如下:
try { // 此处是可能产生例外的语句 } catch(error) { // 此处是负责例外处理的语句 } finally { // 此处是出口语句 }
上述代码中,try块中的语句首先被执行。如果运行中发生了错误,控制就会转移到位于catch块中语句,其中括号中的error参数被作为例外变量传递。否则,catch块的语句被跳过不执行。无论是发生错误时catch块中的语句执行完毕,或者没有发生错误try块中的语句执行完毕,最后将执行finally块中的语句。
下面我们来看一个例子:
<script language="javascript"> try { document.writeln("开始执行try块语句 ---> ") document.writeln("还没有发生例外 ---> ") alert((prompt("输入一个值:",""))) } catch(err) { document.writeln("捕捉到例外,开始执行catch块语句 --->"); document.writeln("错误名称: " + err.name+" ---> "); document.writeln("错误信息: " + err.message+" ---> "); } finally { document.writeln("开始执行finally块语句") } </script>
我们输入abc,然后确定,输出结果如下:
“开始执行try块语句 ---> 还没有发生例外 ---> 捕捉到例外,开始执行catch块语句 ---> 错误名称: TypeError ---> 错误信息: 'abc' 未定义 ---> 开始执行finally块语句”
上述例程以try块语句开始,当输出信息“还没有发生例外”后,弹出输入对话框,要求用户输入一个数值,当我们输入非法的信息"abc"后,就引发了一个例外,所以剩下的try块中的语句将被跳过而开始执行catch块语句。Catch块开始的err参数作为这个例外的错误对象,它具有name和message两个属性。最后,执行finally块的语句。
我们看到,由于没有错误发生,当try块的语句执行完毕后,catch块语句被跳过,出现一个窗口显示输入的数值,最后执行了finally块的语句。
四、try...catch...finally的变形
try…catch…finally语句有两种变形应用,即try…catch或者try…finally。
try…catch这种结构最常见,它的执行过程是:当没有例外发生执行完毕try块语句后或者发生例外执行完catch块语句后,控制将转移到整个try…catch结构后面的语句。请看下面的例子:
try { document.writeln("Beginnng the try block") document.writeln("No exceptions yet") // Create a syntax error ("6 + * 3") document.writeln("Finished the try block with no exceptions") } catch(err) { document.writeln("Exception caught, executing the catch block") document.writeln("Error name: " + err.name) document.writeln("Error message: " + err.message) } document.writeln("Executing after the try-catch statement")
如果是try…finally结构,那么当发生例外时,由于没有catch块语句来捕捉错误,所以最终finally块的语句也不会被执行。因此,这种结构在实际应用中很少见。
五、例外的表现形式:Error对象
在JavaScript,例外是作为Error对象出现的。Error对象有两个属性:name属性表示例外的类型,message属性表示例外的含义。根据这些属性的取值,我们可以决定处理例外的方式,比如:
function Text() { try { alert((prompt("Enter JavaScript to uate:",""))) } catch(err) { if(err.name == "SyntaxError") alert("Invalid expression") else alert("Cannot uate") } }
上面的代码将对用户输入的内容进行表达式求值,然后显示出来。如果在求值过程中发生了SyntaxErroe类型错误,那么就会显示给用户“Invalid expression”的信息;否则,用户得到信息“Cannot uate”。
Error.name的取值一共有六种,如下: Error:()的使用与定义不一致 RangeError:数值越界 ReferenceError:非法或不能识别的引用数值 SyntaxError:发生语法解析错误 TypeError:操作数类型错误 URIError:URI处理函数使用不当
六、定制例外信息
上述的六种Error类型基本上覆盖了脚本程序运行时所可能发生的错误。除了这些类型以外,我们还可以使用Error构造器来自定义例外类型,其语法如下:
myError = new Error(msg)
其中msg参数表示所定义的新例外的message属性值。同时,我们还可以创建新的对象类型以作为Error的子类型:
function MyError(msg) { this.name = "MyError" this.message = msg } MyError.prototype = new Error;
然后,我们就可以创建自定义错误子类的实例:
myError = new MyError("My error message")
七、触发例外
创建一个Error对象后,就可以使用throw语句来触发相应的例外。Throw的语法如下:
throw errObj
errObj必须是一个Error对象或者Error的子类型。在try块代码中触发一个例外后,控制将直接转入catch块。
下面的代码中,在try块中触发了一个例外,设置例外信息为“oops”,然后控制转移到catch块:
var s try { s = "one " throw new Error("oops") s += "two" } catch(err) { s += err.message } s += " three" alert(s)
编写代码来触发例外的优点很多,比如有利于自定义错误类型,快速转入catch块执行,以及下面要介绍的在嵌套例外中将错误传递到外层。
八、嵌套例外处理
JavaScript支持多层次的嵌套例外处理。一般情况下,我们可以在内部例外处理的catch代码块中捕捉并处理错误,然后再次触发例外,这样就可进一步在外部例外处理的catch代码块中做更加深入的处理。下面来看看一个嵌套例外处理的例子:
var inner; var outer; try { document.writeln("Beginning outer try block, no exceptions yet"); try{ document.writeln("Beginning inner try block, no exceptions yet"); // 生成一个引用错误 document.writeln(undefinedVariable) document.writeln("Finished inner try block with no exceptions"); } catch(inner) { // 内部例外处理 document.writeln("Exception caught, beginning inner catch block"); document.writeln("Error type: " + inner.name); document.writeln("Error message: " + inner.message); throw inner; document.writeln("No exceptions thrown in inner catch block"); } finally { document.writeln("Executing inner finally block"); } document.writeln("Finished outer try block with no exceptions"); } catch(outer) { // 外部例外处理 document.writeln("Exception caught, beginning outer catch block"); document.writeln("Error type: " + outer.name); document.writeln("Error message: " + outer.message); } finally { document.writeln("Executing outer finally block"); }
执行后的输出结果如下:
Beginning outer try block, no exceptions yet Beginning inner try block, no exceptions yet Exception caught, beginning inner catch block Error type: ReferenceError Error message: undefinedVariable is not defined Executing inner finally block Exception caught, beginning outer catch block Error type: ReferenceError Error message: undefinedVariable is not defined Executing outer finally block
嵌套例外处理的好处在于使我们能够很好地分阶段处理错误,内部例外处理可以负责解决由错误引发的脚本代码问题,外部例外处理则用于负责提供给用户的反馈信息或者对例外信息进行日志记录。
3,rgb与esl
rgb(红red绿green蓝blue)
esl(色调,饱和度,亮度)
4,空值toString----报错空指针
、
else if (auditState.equals("1")) { sql += "status = '3', audit_opinion ='(二级审核通过)" + auditMessage + "' where data_id = '" + primaryId+ "'";aduitLog.setRemark("2");aduitLog.setStatus("3");String PurgoodsName = "";String Purunit = "";String Purstandrad = "";String PurgoodsType = "";String PurparentType = "";String PurgoodsPrice = "";String PurgoodsAmount = "";String PurcntFee = "";String Purremark = "";String Purstaff = "";String Purrecordtime = "";List<?> purchaseMessage = getPurchaseMessage(primaryId);for (int i = 0; i < purchaseMessage.size(); i++) {PurgoodsName = ((Map<?, ?>) purchaseMessage.get(i)).get("GOODS_NAME")==null ?"":((Map<?, ?>) purchaseMessage.get(i)).get("GOODS_NAME").toString();Purunit = ((Map<?, ?>) purchaseMessage.get(i)).get("UNIT")==null ?"": ((Map<?, ?>) purchaseMessage.get(i)).get("UNIT").toString();Purstandrad = ((Map<?, ?>) purchaseMessage.get(i)).get("STANDRAD")==null ?"":((Map<?, ?>) purchaseMessage.get(i)).get("STANDRAD").toString();PurgoodsType = ((Map<?, ?>) purchaseMessage.get(i)).get("GOODS_TYPE").toString();PurparentType = ((Map<?, ?>) purchaseMessage.get(i)).get("PARENT_TYPE").toString();PurgoodsPrice = ((Map<?, ?>) purchaseMessage.get(i)).get("GOODS_PRICE").toString();PurgoodsAmount = ((Map<?, ?>) purchaseMessage.get(i)).get("GOODS_AMOUNT").toString();PurcntFee = ((Map<?, ?>) purchaseMessage.get(i)).get("CNT_FEE").toString();//Purremark = ((Map<?, ?>) purchaseMessage.get(i)).get("REMARK")toString();Purremark = ((Map<?, ?>) purchaseMessage.get(i)).get("REMARK")==null ?"":((Map<?, ?>) purchaseMessage.get(i)).get("REMARK").toString();Purstaff = ((Map<?, ?>) purchaseMessage.get(i)).get("purchase_staff").toString();Purrecordtime = ((Map<?, ?>) purchaseMessage.get(i)).get("record_time").toString();}List<?> Puremail = getPuremail();List<?> PuremailName = getPuremailName();receiveMailAccount = ((Map<?, ?>) Puremail.get(0)).get("email").toString();mailContent = "尊敬的xxx" + " " + ((Map<?, ?>) PuremailName.get(0)).get("USER_NAME").toString()+ " :<br>" + "     您好 !<br>" + "     由"+ " " + Purstaff + " " + "于" + " " + Purrecordtime + " "+ "提出的采购申请二审已经通过,请尽快登录公司系统核实,进行该物资采购" + "<br>" + "     采购信息如下" + "<br>"+ "     商品名称:" + " " + PurgoodsName + " " + "<br>"+ "     商品单位:" + " " + Purunit + " " + "<br>"+ "     商品规格:" + " " + Purstandrad + " " + "<br>"+ "     商品小类:" + " " + PurgoodsType + " " + "<br>"+ "     商品大类:" + " " + PurparentType + " " + "<br>"+ "     商品单价:" + " " + PurgoodsPrice + " " + "<br>"+ "     采购数量:" + " " + PurgoodsAmount + " " + "<br>"+ "     采购总额:" + " " + PurcntFee + " " + "<br>"+ "     采购理由:" + " " + Purremark + " " + "<br>";subject = "采购审核通知";result = MailUtil.MailSend(receiveMailAccount, mailContent, subject);}
在这里,我先定义了个变量Purremark,并赋了个初始空值'''',然后list在数据库取出一条数据,for循环取出每个字段的数据,并将list对应数据赋值给开始定义的变量,当这个list里面赋给Purremark的数据取出来为空值时,将其toString,就会报空指针异常错误(注意这个空值并不是开始定义的空值,而是从list取出的空值数据,),解决办法是用三元表达式(“a ”== "b" ? "c" : “d”; 注:如果a等于b,则给a赋值c,否则,赋值d)进行判断,如果为空,则不toString,不为空,则toString
定义
空对象:
空值:
空格:
String n = " ";
是指一个字符对象已经实例化,对象的内容为空格。
判断
空对象判断:
空值判断:
(2) length()方法是查看某个字符串对象的字符个数,可用表达式判断:k.length() == 0 ;
(3) isEmpty()方法是判断某个字符串对象字符个数时候为0,可用表达式判断:k.isEmpty() ;
空格判断:
空格内容为一个空格,虽然在输出显示时候和空值一样,都是空的,但是在系统里面的内存机制不一样的,空格字符串表示该对象的内存空间里面有内容,是空格,字符个数是1,因此,在使用如下方法时候结果如下:
n.length() 的输出值为1, n.isEmpty()输出为false。
判断语句: n.equals(" ") ;
运算
字符串提供了"+"操作符,表示两个字符串对象可以链接一起,在使用该运算时候,有这样一条规则:如果有一个操作数是字符串,其他操作数会被转换成字符串。
在上面代码s = s + t; s申明时候为空对象,通过"+"时,会将null转化为一个字符串对象。因此结果是nullab。
大家可以对照上面代码例子,更加详细的了解这三者实现机制。
5,三元表达式
条件?a:b;
举个简单例子 int a=1; int b=2; int c= a>b?1:0; 结果c 为0 (a>b true 输入第一个,a>b false 输入第二个) a>b 为条件 后面当条件为true时返回":"前面的结果,反之返回":"后面的结果