时间:2021-07-01 10:21:17 帮助过:12人阅读
JavaScript基础
JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。
一、基本知识
(一)、存在形式
1、JavaScript代码存在形式
- <span style="font-size: 16px;"> <!--方式一-->
- </span>
2、JavaScript存放位置
HTML的head中
HTML的body代码块底部(推荐)
由于Html代码是从上到下执行,如果Head中的js代码耗时严重,就会导致用户长时间无法看到页面,如果放置在body代码块底部(执行完body代码后再执行JavaScript代码),那么即使js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。
(二)、变量
JavaScript中变量的声明是一个非常容易出错的点,局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量
- <span style="font-size: 16px;"> </span>
JavaScript中代码注释:
注:此注释仅在Script块中生效。
(三)、数据类型
JavaScript 中的数据类型分为原始类型和对象类型:
特别提醒:数字、布尔值、null、undefined、字符串的值是不可变的
null为特殊的值,表示什么都没有
undefined表示未定义
1、数字(Number)
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法
转换:
特殊值:
更多数值计算:
- <span style="color: #000000;">常量
- Math.E
- 常量e,自然对数的底数。
- Math.LN10
- 10的自然对数。
- Math.LN2
- 2的自然对数。
- Math.LOG10E
- 以10为底的e的对数。
- Math.LOG2E
- 以2为底的e的对数。
- Math.PI
- 常量figs</span>/U03C0.gif。
- <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( )
- 计算正切值。</span>
2、字符串(String)
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:可以访问字符串任意位置的文本,但是JavaScript并未提供修改已知字符串内容的方法。
常见功能:
- <span style="font-size: 16px;">obj.length 长度
- obj.trim() 移除空白
- obj.trimLeft()
- obj.trimRight)
- obj.charAt(n) 返回字符串中的第n个字符
- obj.concat(value, ...) 拼接
- obj.indexOf(substring,start) 子序列(从原来的序列取出来便是子序列,子序列的位置按第一个字符取出来的位置定)位置(从前往后)
- obj.lastIndexOf(substring,start) 子序列位置(从后往前)
- obj.substring(from, to) 根据索引获取子序列(用于提取字符串中介于两个指定下标之间的字符)
- obj.slice(start, end) 切片
- obj.toLowerCase() 大写
- obj.toUpperCase() 小写
- obj.split(delimiter, limit) 分割
- obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效)
- obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个。
- obj.replace(regexp, replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配项,
- $数字:匹配的第n个组内容;
- $&:当前匹配的内容;
- $`:位于匹配子串左侧的文本;
- $':位于匹配子串右侧的文本
- $$:直接量$符号</span>
- <meta charset="UTF-8">
- <title>Title</title>
- <div id="i1" style="display: inline-block;background-color: green;color: white">欢迎宝强位临指导</div>
3、布尔类型(Boolean)
布尔类型仅包含真假,与Python不同的是其首字母小写。
4、数组
JavaScript中的数组类似于Python中的列表
常见功能:
- <span style="color: #000000;">obj.length 数组的大小
- obj.push(ele) 尾部追加元素
- obj.pop() 尾部获取一个元素
- obj.unshift(ele) 头部插入元素
- obj.shift() 头部移除元素
- obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素
- obj.splice(n,</span>0<span style="color: #000000;">,val) 指定位置插入元素
- obj.splice(n,</span>1<span style="color: #000000;">,val) 指定位置替换元素
- obj.splice(n,</span>1<span style="color: #000000;">) 指定位置删除元素
- obj.slice( ) 切片
- obj.reverse( ) 反转
- obj.join(sep) 将数组元素连接起来以构建一个字符串(python是sep.join(obj))
- obj.concat(val,..) 连接数组
- obj.sort( ) 对数组元素进行排序<br></span>
5、通过对象来构造字典
- <span style="color: #008000;">//</span><span style="color: #008000;">构造字典</span>
- a = {'k1':123,'k2':456<span style="color: #000000;">}
- </span><span style="color: #008000;">//</span><span style="color: #008000;">访问字典</span>
- a['k1']
(四)、其他
1、序列化
- a= {k1: 123, k2: 456<span style="color: #000000;">}
- </span><span style="color: #008000;"> //</span><span style="color: #008000;">把对象转换成字符</span>
- b=<span style="color: #000000;">JSON.stringify(a)
- </span><span style="color: #008000;"> //</span><span style="color: #008000;">把字符转换成对象</span>
- b=JSON.parse(b)
2、转义
url的转义:
3、eval
JavaScript中的eval是Python中eval和exec的合集,既可以编译代码也可以获取返回值。
- eval("alert(123)")
4、正则表达式
JavaScript中支持正则表达式,其主要提供了两个功能:
注:定义正则表达式时,“g”、“i”、“m”分别表示全局匹配,忽略大小写、多行匹配。
5、时间处理
JavaScript中提供了时间相关的操作,时间操作中分为两种时间:
- d=<span style="color: #0000ff;">new</span><span style="color: #000000;"> Date()
- 结果:Fri Aug </span>19 2016 14:45:44 GMT+0800<span style="color: #000000;"> (中国标准时间)
- </span><span style="color: #008000;">//</span><span style="color: #008000;">获取年</span>
- <span style="color: #000000;">d.getFullYear()
- </span><span style="color: #008000;">//</span><span style="color: #008000;">获取时</span>
- <span style="color: #000000;">d.getHours
- d.getUTCHours()
- </span><span style="color: #008000;">//</span><span style="color: #008000;">改变时间</span>
- d.setMinutes(d.setMinutes() + 2)
更多操作参见:http://www.shouce.ren/api/javascript/main.html
6、typeof 运算符
返回一个用来表示表达式的数据类型的字符串。
- <span style="color: #0000ff;">var</span><span style="color: #000000;"> name
- </span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">(name)
- 结构:</span>"undefined"
在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组: if( typeof(document.mylist.length) != "undefined" ) {}或 if( !isNaN(document.mylist.length) ) {}
7、 document对象详解
(五)、条件语句及异常
1、条件语句
JavaScript中支持两个中条件语句,分别是:if 和 switch
- <span style="color: #0000ff;">if</span><span style="color: #000000;">(条件){
- }</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>
- <span style="color: #0000ff;">switch</span><span style="color: #000000;">(name){
- </span><span style="color: #0000ff;">case</span> '1'<span style="color: #000000;">:
- age </span>= 123<span style="color: #000000;">;
- </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">case</span> '2'<span style="color: #000000;">:
- age </span>= 456<span style="color: #000000;">;
- </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> :
- age </span>= 777<span style="color: #000000;">;
- }</span>
2、循环语句
JavaScript中支持三种循环语句,分别是:
- <span style="color: #0000ff;">var</span> names = ["alex", "tony", "rain"<span style="color: #000000;">];
- </span><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">var</span> i=0;i<names.length;i++<span style="color: #000000;">){
- console.log(i);
- console.log(names[i]);
- }</names.length;i++<span>
- <span style="color: #0000ff;">var</span> names = ["alex", "tony", "rain"<span style="color: #000000;">];
- </span><span style="color: #0000ff;">for</span>(<span style="color: #0000ff;">var</span> index <span style="color: #0000ff;">in</span><span style="color: #000000;"> names){
- console.log(index);
- console.log(names[index]);
- }</span>
- <span style="color: #0000ff;">while</span><span style="color: #000000;">(条件){
- </span><span style="color: #008000;">//</span><span style="color: #008000;"> break;</span>
- <span style="color: #008000;">//</span><span style="color: #008000;"> continue;</span>
- }
3、异常处理
- <span style="color: #0000ff;">try</span><span style="color: #000000;"> {
- </span><span style="color: #008000;">//</span><span style="color: #008000;">这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行</span>
- <span style="color: #000000;">}
- </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (err) {
- </span><span style="color: #008000;">//</span><span style="color: #008000;"> 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。</span>
- <span style="color: #008000;">//</span><span style="color: #008000;">e是一个局部变量,用来指向Error对象或者其他抛出的对象</span>
- <span style="color: #000000;">}
- </span><span style="color: #0000ff;">finally</span><span style="color: #000000;"> {
- </span><span style="color: #008000;">//</span><span style="color: #008000;">无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。</span>
- <span style="color: #000000;">}
- 注:主动抛出异常 </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> Error('错误信息')
更多:http://www.w3school.com.cn/js/js_errors.asp
二、函数
(一)、基本函数
1、基本函数
JavaScript中函数基本上可以分为一下三类:
结果为5 // 自执行函数(可做封装) (function(arg){ console.log(arg); })('123')
- <span style="color: #008000;">//</span><span style="color: #008000;"> 普通函数</span>
- <span style="color: #0000ff;">function</span><span style="color: #000000;"> func(arg){
- </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
- }
- </span><span style="color: #008000;">//</span><span style="color: #008000;"> 匿名函数(把函数当成一个function对象,用变量名来调用)</span>
- <span style="color: #0000ff;">var</span> func = <span style="color: #0000ff;">function</span><span style="color: #000000;">(arg){
- </span><span style="color: #0000ff;">return</span> "tony"<span style="color: #000000;">;
- }<br> 调用:func(alert(5));//</span>
注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。
(二)、作用域
在Java或C#中存在块级作用域,即:大括号就是一个作用域
在JavaScript语言中无块级作用域
输出:server /*注:在JavaScript6中新引用了 let关键字,用于定义块级作用域。即: let name = 'server';*/
- <span style="font-size: 16px;"></span>
JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。
切记:所有的作用域在创建函数且未执行时候就已经存在。
- <span style="color: #0000ff;">function</span><span style="color: #000000;"> f2(){
- </span><span style="color: #0000ff;">var</span> arg= [11,22<span style="color: #000000;">];
- </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> f3(){
- console.log(arg);
- }
- arg </span>= [44,55<span style="color: #000000;">];
- </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> f3;
- }
- ret </span>=<span style="color: #000000;"> f2();
- ret();</span>
注:声明提前,在JavaScript引擎“预编译”时进行(js的预编译大概顺序,js引擎读取一段js代码,首先预编译,就是逐行读取js代码,寻找变量和函数,遇到全局或局部变量,把变量的值变为undefind,存在内存中,遇到函数,直接存在内存中,这个过程如果发现语法错误,预编译终止。)
作用域和作用域链详解:
点我!点我!
(三)、闭包
「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」
由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。
- <span style="font-size: 16px;"><span style="color: #008000;">//</span><span style="color: #008000;">利用封装来闭包</span><span style="color: #008000;">
- //</span><span style="color: #008000;">A公司</span>
- (<span style="color: #0000ff;">function</span><span style="color: #000000;">(){
- </span><span style="color: #0000ff;">var</span> ='bibao1'<span style="color: #000000;">;
- fuction f1()
- {
- console.log(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">)
- }
- </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> f2()
- {
- console.log(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">)
- }
- })();
- </span><span style="color: #008000;">//</span><span style="color: #008000;">B公司</span>
- (<span style="color: #0000ff;">function</span><span style="color: #000000;">(){
- </span><span style="color: #0000ff;">var</span> ='bibao2'<span style="color: #000000;">;
- fuction f1()
- {
- console.log(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">)
- }
- </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> f2()
- {
- console.log(</span><span style="color: #0000ff;">var</span><span style="color: #000000;">)
- }
- })();</span></span>
(四)、面向对象
- <span style="font-size: 16px;"><span style="color: #0000ff;">function</span><span style="color: #000000;"> Foo (name,age) {
- </span><span style="color: #0000ff;">this</span>.Name =<span style="color: #000000;"> name;
- </span><span style="color: #0000ff;">this</span>.Age =<span style="color: #000000;"> age;
- </span><span style="color: #0000ff;">this</span>.Func = <span style="color: #0000ff;">function</span><span style="color: #000000;">(arg){
- </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span>.Name +<span style="color: #000000;"> arg;
- }
- }
- </span><span style="color: #0000ff;">var</span> obj = <span style="color: #0000ff;">new</span> Foo('alex', 18<span style="color: #000000;">);
- </span><span style="color: #0000ff;">var</span> ret = obj.Func("sb"<span style="color: #000000;">);
- console.log(ret);</span></span>
对于上述代码需要注意:
上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题.
- <span style="color: #0000ff;">function</span><span style="color: #000000;"> Foo (name,age) {
- </span><span style="color: #0000ff;">this</span>.Name =<span style="color: #000000;"> name;
- </span><span style="color: #0000ff;">this</span>.Age =<span style="color: #000000;"> age;
- }
- Foo.prototype </span>=<span style="color: #000000;"> {
- GetInfo: </span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){
- </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span>.Name + <span style="color: #0000ff;">this</span><span style="color: #000000;">.Age
- },
- Func : </span><span style="color: #0000ff;">function</span><span style="color: #000000;">(arg){
- </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span>.Name +<span style="color: #000000;"> arg;
- }
- }
- </span><span style="color: #0000ff;">var</span> obj= <span style="color: #0000ff;">new</span> Foo(11,22<span style="color: #000000;">)
- name</span>=<span style="color: #000000;">obj.Name
- obj.GetInto()</span>