JavaScript中URL转义
相当于Python中的encode编码和decode解码操作,主要就是对存在中文的URL进行转义,具体可到浏览器的控制台练习。
decodeURI( ) URl中未转义的字符
decodeURIComponent( ) URI组件中的未转义字符
encodeURI( ) URI中的转义字符
encodeURIComponent( ) 转义URI组件中的字符
escape( ) 对字符串转义
unescape( ) 给转义字符串解码
URIError 由URl的编码和解码方法抛出
JavaScript中的eval
在Python中存在内建的方法eval(表达式)和exec(执行代码),两者都可以执行字符串表达式。eval(“1+1”)可以直接计算结果并返回,但是不能执行for循环,使用exec就可以,该方法没有返回值。JavaScript中的eval是Python中eval和exec的结合体,可以执行代码,也可以执行表达式,并且有返回值。
eval()
EvalError 执行字符串中的JavaScript代码
JavaScript中的时间处理
JavaScript中提供了时间相关的操作,时间操作中分为两种时间: 时间统一时间;本地时间(东8区)。在Python使用time模块获取时间,在js中需要有一个Date对象,有了它我们才可以通过它操作时间:
var d=new Date() //创建时间对象 d封装了当前时间
//想要获取详细的时间信息 哪一年 分钟等等
d.getMinutes() //可以使用d.来获取
n=d.getMinutes() +5 //修改当前时间
d.setMinutes(n) //设置当前时间
JavaScript的作用域
类比于其它语言,都是以代码块作为作用域的,如果超出了代码块就会报错。例如说下面的Python代码:
def func():
if 2==2:
name='鳄鱼君Ba'
print(name)
func()
#print(name) #这样运行就会报错
我们来看一下java的代码:
public void Func(){
if(2==2){
string name='Java';
}
console.writeline(name);
}
Func()
两者相比较,在其它语言中是以大括号作为代码块的,在Python中是以冒号加上缩进作为代码块。在Python中如果在函数执行结束在打印name就会报错,那么就可以理解为在Python中是以函数作为作用域的,一个函数整体是一个作用域,在外部运行内部的变量就会报错。
在JavaScript中默认是通过函数来划分作用域的,例如:
function func(){
if(2==2){
var name='鳄鱼君Ba';
}
console.log(name);
}
func()
1.函数的作用域在创建函数且未执行时候就已经存在。 2.函数的作用域存在作用域链,并且也是在被调用之前创建。 3.js代码内部,局部变量会提前声明,但是不会赋值。
当出现函数嵌套时,就出现了作用域链(一个函数里面嵌套函数)。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。
ppxia="鳄鱼君Ba"; //定义一个全局变量
function func1(){
var ppxia="Python";
function func2(){
var ppxia="Java";
console.log(ppxia);
}
func2()
}
func1()
以上存在函数的嵌套,就会出现作用域链,最外层是func1的作用域,在内部有func2作用域,如果内部执行func2,就会寻找ppxia变量并打印,优先从内部也就是自己的作用域寻找,如果没有上一级找,也就是func1的作用域,如果没有到全局变量中寻找,没有全局变量就找不到报错了。你可以自己去掉ppxia变量试试。我们呢再来看另一种情况:
ppxia="鳄鱼君Ba"; //定义一个全局变量
function func1(){
var ppxia="Python";
function func2(){
console.log(ppxia);
}
return func2;
}
var ret=func1();
ret()
函数加括号表示会执行func1,但是func2内部没有执行,而是返回了func2函数,所以ret接收的就是func1的返回值代指func2,再执行ret(),所以最终会输出Python。我们在来看下一个例子:
ppxia="鳄鱼君Ba"; //定义一个全局变量
function func1(){
var ppxia="Python";
function func2(){
console.log(ppxia);
}
var ppxia="Java";
return func2;
}
var ret=func1();
ret()
解析器会按照从上到下的顺序执行代码,ppxia在执行func1函数的时候,ppxia会被修改为Java,再次执行ret的时候就相当于执行func2函数,它会寻找ppxia的值,自己没有往上一级寻找,也就是Java。我们再看一个例子:
function func1(){
console.log(ppxia);
var ppxia="鳄鱼君Ba";
}
以上代码执行会输出undefined,你可能觉得会输出鳄鱼君Ba,那么在你眼里js代码会跳着执行。不多解释:函数内部局部变量提前声明!
JavaScript面向对象
function Func2(name){
this.Name=name;
}
//this相当于Python中的self
var obj =new Func2('鳄鱼君Ba') ; //创建一个对象 对象里面封装了一个name值等于鳄鱼君Ba
obj.Name
this指代对象(相当于Python的self); 创建对象:new 函数()
function Func2(name){
this.Name=name;
this.sayName=function(){
console.log(this.Name);
}
}
//创建两个对象
var obj1=new Func2('鳄鱼君Ba');
obj1.Name //
obj1.sayName() //调用方法
var obj2=new Func2('Python');
obj2.Name //
obj2.sayName() //调用方法
上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:function Func2(name){
this.Name=name;
//Func2的原型
Foo.prototype={
'sayName':function(){
console.log(this.Name);
}
}
var obj1=new Func2('鳄鱼君Ba1'); //每一个对象中只封装以一个Name
obj1.sayName() //调用方法
var obj2=new Func2('鳄鱼君Ba2');
解释器从上到下开始执行,先创建一个类
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!