前言
今天大概了解了一些常识,草草总结一下吧,然后进入正轨学习啦!
URI
URI完整名为统一资源标识符(Uniform Resource Identifier),网址就是一种uri,而javaScript有几个方法专门来解析URI:encodeURI,encodeURIComponent,decodeURI,decodeURIComponent,其实就是一种编码形式,因为URI可能出现一些字符如中文,日文之类的,而浏览器解析肯定是要把编码统一管理才方便啊。encode开头就是编码,decode开头就是解码。
encodeURI常用于对整个URI进行编码,因为它并不会对URI本身的特殊字符编码如:’/’,而encodeURIComponent是对URI某一段进行编码,因为它会对所有除数字,字母的字符进行编码,至于两个decode方法则与之对应,不过多阐述
encodeURI("www.hao123.com/?name=敏感肌能用吗");
encodeURIComponent("www.hao123.com/?name=敏感肌能用吗");
decodeURI(encodeURI("www.hao123.com/?name=敏感肌能用吗"));
eval
eval很像java中的反射,他就像一个ECMA解析器,可以解析参数里面的字符串命令然后执行,大大增加了JavaScript动态性。
eval("alert('敏感肌能用吗')");
在非严格模式下,eval内部也可以定义变量,函数也是一个变量,所以也可以定义函数。在严格模式下,eval定义的变量,外部无法访问而报错。
eval("function show(msg){alert(msg);}");
eval("var x=114514;");
show(x);
包装类
以前介绍过利用new Object创建一个对象,可以直接加属性。问题来了,一个基础类型能直接加属性吗?
var x=new Object();
x.name="lxy";
console.log(x.name);
我们发现输出结果是undefined。这又是怎么一回事呢?快来随小编一起看看吧
var x=114514;
x.name="lxy";
console.log(x.name);
javaScript有三个特殊的包装类:String,Number,Boolean,当我们使用基础类的时候,会在后台自动实例化包装类,然后利用包装类间接操作,最后销毁包装类。
var x=114514;
x.name="lxy";
// 等效于下代码
var y=new Number(114514);
y.name="lxy";
y=null;
虽然提供给了我们包装类,但是并不建议大家直接实例化包装类使用,大家知道这个概念就好,因为包装类是属于Object对象,所以用typeof返回的是object,这也就很容易出一些莫名其妙的bug,难以一眼发现
var x=new Boolean(false);
// 结果是true
console.log(x&&true);
// 结果是false
console.log(false&&true);