<table style="height: 30px; background-color: #afeeee; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">一、简介</td>
</tr></table>
概述:
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分(通俗的讲就是浏览器),广泛用于客户端的脚本语言,最早是在(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JavaScript 组成:
核心(ECMAScript):ECMAScript 描述了该语言的语法和基本对象; 文档对象模型(DOM):DOM 描述了处理网页内容的方法和接口; 浏览器对象模型(BOM):BOM 描述了与浏览器进行交互的方法和接口;
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">二、代码存在形式和位置</td>
</tr>
</table>1、存在形式:
js文件形式和嵌入到html中:
<script type"text/javascript"><span style="color: #000000;">
Js代码内容
@H_502_34@
2、JavaScript代码存放位置
由于HTML代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部,那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。
JavaScript变量声明一般使用var,如果不使用var则表示全局变量,一次性声明多个变量使用逗号隔开。
@H_502_34@
2、区分大小写
与python一样,变量test和变量TEST是不同的。
3、变量命名规则
- 第一个字符必须是字母、下划线(_)或美元符号($)
- 余下的字符可以是下划线、美元符号或任何字母或数字字符
- 除了上面两条规则,以下关键字不能作为变量名
4、注释
单行注释以双斜杠开头(//)多行注释以单斜杠和星号开头(/*),以星号和单斜杠结尾(*/)
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">四、数据类型</td>
</tr></table>
分类:
原始类型(5种):
- number - 如果变量是 Number 类型的
- string - 如果变量是 String 类型的
- object - 如果变量是一种引用类型或 Null 类型的
- undefined - 如果变量是 Undefined 类型的
- boolean - 如果变量是 Boolean 类型的
对象类型:
- 数组(arry)
- “字典”
- 时间(date)
- ......
1、数字(number)
JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示。
转换:
- parseInt(..) 将某值转换成数字,不成功则NaN
- parseFloat(..) 将某值转换成浮点数,不成功则NaN
特殊值:
- NaN,非数字。可使用 isNaN(num) 来判断。
- Infinity,无穷大。可使用 isFinite(num) 来判断。
更多数值计算:
常量e,自然对数的底数。
Math.LN10
10的自然对数。
Math.LN2
2的自然对数。
Math.LOG10E
以10为底的e的对数。
Math.LOG2E
以2为底的e的对数。
Math.PI
常量figs
<span style="color: #000000;">
Math.SQRT1_2
2的平方根除以1。
Math.SQRT2
2的平方根。
静态函数
Math.abs( )
计算绝对值。
Math.acos( )
计算反余弦值。
Math.asin( )
计算反正弦值。
Math.atan( )
计算反正切值。
Math.atan2( )
计算从X轴到一个点的角度。
Math.ceil( )
对一个数上舍入。
Math.cos( )
计算余弦值。
Math.exp( )
计算e的指数。
Math.floor( )
对一个数下舍人。
Math.log( )
计算自然对数。
Math.max( )
返回两个数中较大的一个。
Math.min( )
返回两个数中较小的一个。
Math.pow( )
计算xy。
Math.random( )
计算一个随机数。
Math.round( )
舍入为最接近的整数。
Math.sin( )
计算正弦值。
Math.sqrt( )
计算平方根。
Math.tan( )
计算正切值。
@H_502_34@
<span class="cnblogs_codecollapse">View Code
@H502_34@
2、字符串(string)
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。
常见功能:
3、布尔类型
布尔类型仅包含真假,与Python不同的是其首字母小写。
4、null和undefined
数组与python中列表类似,常见的方法有:
obj.pop() 尾部获取一个元素
obj.unshift(ele) 头部插入元素
obj.shift() 头部移除元素
obj.splice(start,deleteCount,value,...) 插入、删除或替换数组的元素
obj.splice(n,0<span style="color: #000000;">,val) 指定位置插入元素
obj.splice(n,1<span style="color: #000000;">,val) 指定位置替换元素
obj.splice(n,1<span style="color: #000000;">) 指定位置删除元素
obj.slice( ) 切片
obj.reverse( ) 反转
obj.join(sep) 将数组元素连接起来以构建一个字符串
obj.concat(val,..) 连接数组
obj.sort( ) 对数组元素进行排序
@H_502_34@
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">六、运算符</td>
</tr></table>
1、算术运算符
赋值 y = 5,以下表格将向你说明算术运算符的使用:
二、赋值运算
给定 x=10 和 y=5,下面的表格解释了赋值运算符:
3、字符串运算
+ 运算符, += 运算符可用于连接字符串。
给定 text1 = "Good ", text2 = "Morning", 及 text3 = "",下面的表格解释了字符串运算符的使用:
4、比较运算
比较运算符用于逻辑语句的判断,从而确定给定的两个值或变量是否相等。
给定 x=5,下表展示了比较运算符的使用:
5、条件运算
<span style="color: #0000ff;">var iMax = (a > 3) ? 3 : 4;<span style="color: #008000;">//<span style="color: #008000;">输出4
@H_502_34@
6、逻辑运算
逻辑运算符用来确定变量或值之间的逻辑关系。
给定 x=6 and y=3,以下实例演示了逻辑运算符的使用:
7、位运算
位运算符工作于32位的数字上。任何数字操作都将转换为32位。结果会转换为 JavaScript 数字。
JavaScript中支持两个中条件语句,分别是:if 和 switch
}</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #000000;">(条件){
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
}</span></pre>
@H_502_34@
<div class="cnblogs_code">
1代码块 1 2代码块 2 代码 与 1 和 2代码 } <span style="color: #008000;">//<span style="color: #008000;">例子<span style="color: #0000ff;">break<span style="color: #000000;">;
<span style="color: #0000ff;">switch<span style="color: #000000;">(name){
<span style="color: #0000ff;">case '1'<span style="color: #000000;">:
age = 123<span style="color: #000000;">;
<span style="color: #0000ff;">break<span style="color: #000000;">;
<span style="color: #0000ff;">case '2'<span style="color: #000000;">:
age = 456<span style="color: #000000;">;
<span style="color: #0000ff;">default<span style="color: #000000;"> :
age = 777<span style="color: #000000;">;
}
@H_502_34@
2、循环语句
for语句
console.log(i);
console.log(names[i]);
} <span style="color: #008000;">//<span style="color: #008000;">第二种
<span style="color: #0000ff;">var names = ["wd","rain"<span style="color: #000000;">];
<span style="color: #0000ff;">for(<span style="color: #0000ff;">var index <span style="color: #0000ff;">in<span style="color: #000000;"> names){
console.log(index);
console.log(names[index]);
}
@H_502_34@
for语句循环数组和字典:
<span style="color: #0000ff;">var names = ["wd","rain"<span style="color: #000000;">];
<span style="color: #0000ff;">for(<span style="color: #0000ff;">var index <span style="color: #0000ff;">in<span style="color: #000000;"> names){
console.log(index);
console.log(names[index]);
}
@H_502_34@
while语句
分类:
1.普通函数
@H_502_34@
4.使用return:与python类似函数中使用return可使函数停止并且得到返回值
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">八、序列化、转义、异常处理</td>
</tr></table>
1、序列化
- JSON.stringify(obj) 序列化
- JSON.parse(str) 反序列化
2、转义
- decodeURI( ) 解码URl中未转义的字符和中文
- decodeURIComponent( ) 解码URI组件中的未转义字符
- encodeURI( ) 转码URI中的转义字符和中文
- encodeURIComponent( ) 转码转义URI组件中的字符和中文
- escape( ) 对字符串转义
- unescape( ) 给转义字符串解码
- URIError 由URl的编码和解码方法抛出
结果:
"https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E9%A9%AC%E4%BA%91"
<span style="color: #0000ff;">var
a="wd"<span style="color: #0000ff;">var b=<span style="color: #000000;">escape(URL)
结果:
"https%3A//www.sogou.com/web%3Fquery%3D%u9A6C%u4E91"
<span style="color: #0000ff;">var b=<span style="color: #000000;">unescape(URL)
结果:
"https://www.sogou.com/web?query=马云"
@H_502_34@
3、eval
JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。
- eval()
- EvalError 执行字符串中的JavaScript代码
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">九、javaScript作用域</td>
</tr></table>
JavaScript作用域归纳为以下几点:
1、javaScript采用函数作为作用域(同python),无块级作用域,let关键字除外。
<span style="color: #0000ff;">if(1==1<span style="color: #000000;">){
<span style="color: #0000ff;">var name='wd'<span style="color: #000000;">
}
}
fun();
console.log(name);#报错
@H_502_34@
2.函数作为一个作用域,如果出现函数嵌套函数,则就会出现作用域链。
<div class="cnblogs_code">
name = "wd" name = "seven" name = "jack"输出jack
如上述代码则出现三个作用域组成的作用域链,如果出现作用域链后,那么寻找变量时候就会出现顺序,对于上述实例:
当执行console.log(name)时,其寻找顺序为根据作用域链从内到外的优先级寻找,如果内层没有就逐步向上找,直到没找到抛出异常。
@H_502_34@3.JavaScript的作用域在被执行之前已经创建,后续再去执行时只需要按照作用域链去寻找即可。
示例1:
示例二:
<span style="color: #0000ff;">var name = "eric"<span style="color: #000000;">;
<span style="color: #0000ff;">function<span style="color: #000000;"> inner(){
console.log(name);
}
name </span>= 'jack'<span style="color: #000000;">;
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> inner;
}
<span style="color: #0000ff;">var res =<span style="color: #000000;"> Func();
res();
<span style="color: #008000;">//<span style="color: #008000;"> 输出结果: jack
按照示例一分析,解释器从上到下解释,执行函数Func,name变量得值由eric变成jack,最后再去寻找name变量时候,name值为jack,所以输出jack
@H_502_34@
示例三:
<span style="color: #0000ff;">var name = "seven"<span style="color: #000000;">;
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> Bar;
}
<span style="color: #0000ff;">var res =<span style="color: #000000;"> Func();
res();<span style="color: #008000;">//<span style="color: #008000;">输入wd
@H_502_34@
4.JavaScript中变量都是声明提前,即使不为变量赋值也不会报错,默认在不赋值变量得时候解释器会给变量赋值为undefined。
<span style="color: #008000;">//
<span style="color: #008000;">JavaScript中如果创建值而不赋值,则该值为 undefined,如:<span style="color: #0000ff;">var<span style="color: #000000;"> name;
console.log(name);
<span style="color: #008000;">//<span style="color: #008000;"> 输出:undefined
<span style="color: #008000;">//<span style="color: #008000;">在函数内如果这么写:
<span style="color: #0000ff;">function<span style="color: #000000;"> Foo(){
console.log(name);
<span style="color: #0000ff;">var name = 'seven'<span style="color: #000000;">;
}
Foo();
<span style="color: #008000;">//<span style="color: #008000;"> 输出:undefined
<span style="color: #008000;">//<span style="color: #008000;">总结:上述代码,不报错而是输出 undefined,其原因是:JavaScript的函数在被执行之前,会将其中的变量全部声明,而不赋值。所以,相当于上述实例中,函数在“预编译”时,已经执行了var name;所以上述代码中输出的是undefined
@H_502_34@
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0">
<tr><td><span style="font-size: 16px;">十、javascript中的词法分析</td>
</tr></table>
上面说了javascript的作用域,其实我们也可以利用词法分析来验证javascript中的作用域
什么是词法分析?解释:JavaScript代码自上而下执行,但是在js代码执行前,会首先进行词法分析,所以事实上,js运行要分为词法分析和执行两个阶段。
词法分析步骤:
具体步骤如下:
在函数执行前的一瞬间,生产 Active Object(活动对象),下面简称AO;
第一步:
第二步:
第三步:函数的声明
分析函数声明!如 function age(){}
示例代码:
词法分析解释上述分析过程:
第一步:分析形参
形式参数:AO.age = undefined 接受实参,覆盖掉undefined:AO.age = 5
第二步:分析var变量声明
由于AO.age已经存在,所以不做任何操作:AO.age=5
第三步:分析函数声明
此时函数声明刚好是age,所以覆盖掉之前的age属性,即此时OA.age=function age() {console.log(age)}
代码运行:
词法分析完毕后得到AO.age=function age() {console.log(age)},然后运行代码执行函数,第二行代码age输出 ƒ age() { console.log(age); };
第三行代码,22赋值给age,此时age=22,故第四行代码输出22;
代码时应注意函数表达式不做任何操作,且只声明变量没赋值时,age仍然等于AO.age。