JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,因此在浏览器上按照JavaScript语言的规则编写相应代码,浏览器能够解释并作出相应的处理。javascript
标签:<script></script>html
<!-- 方式一 -->
<script type"text/javascript" src="JS文件"></script>
<!-- 方式二 -->
<script type"text/javascript">
Js代码内容
</script>
因为Html代码是从上到下执行,若是Head中的js代码耗时严重,就会致使用户长时间没法看到页面,若是放置在body代码块底部,那么即便js代码耗时严重,也不会影响用户看到页面效果,只是js实现特效慢而已。java
JavaScript中变量的声明是一个很是容易出错的点,局部变量必须一个 var 开头,若是未使用var,则默认表示声明的是全局变量。正则表达式
<script type="text/javascript">
// 全局变量 name = 'seven'; function func(){ // 局部变量 var age = 18; // 全局变量 gender = "男"; } </script>
JavaScript中的代码注释:编程
注:此注释只能在Script块中生效。api
JavaScript 中的数据类型分为原始类型和对象类型:数组
原始类型:浏览器
对象类型:闭包
特别的,数字、布尔值、null、undefined、字符串是不可变。dom
null、undefined:
null是JavaScript语言的关键字,它表示一个特殊值,经常使用来描述“空值”。
undefined是一个特殊值,表示变量未定义。
示例:
<body> <script> function f1() { console.log(name); var name = 123; } f1(); </script> </body>
经过浏览器打开,而后右键-->检查-->Console。就能够看到下图的显示:
由于代码是从上到下执行,当代码读取到console.log(name)时,咱们尚未定义一个是name的变量,因此会出现undefined。
JavaScript中不区分整数值和浮点数值,JavaScript中全部数字均用浮点数值表示。
建立数字:
<body> <script> num1 = 123;//直接建立了一个原始值 console.log(num1); num2 = new Number(123);//根据Number类建立了一个对象 console.log(num2); </script> </body>
效果演示图:
转换:
示例:将字符串转换成数字。
示例:
字符串转数字智能取个位数,没法得到小数点后面的值,因此就用parseFloat进行转换。
特殊值:
若是isFinite()返回true,是无穷
若是isFinite()返回false,是有限数
示例:
更多数值计算:
常量
Math.E
常量e,天然对数的底数。
Math.LN10
10的天然对数。
Math.LN2
2的天然对数。
Math.LOG10E
以10为底的e的对数。
Math.LOG2E
以2为底的e的对数。
Math.PI
常量figs/U03C0.gif。
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( )
计算正切值。
推荐手册:http://www.shouce.ren/api/javascript/l_Object.html
判断类型:typeof,返回值是字符串。
字符串是由字符组成的数组,但在JavaScript中字符串是不可变的:能够访问字符串任意位置的文本,可是JavaScript并未提供修改已知字符串内容的方法。
常见功能:
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) 从头开始日后找,找到第一个匹配项的索引 obj.match(regexp) 全局搜索,若是正则中有g表示找到所有,不然只找到第一个。 obj.replace(regexp, replacement) 替换,正则中有g则替换全部,不然只替换第一个匹配项, $数字:匹配的第n个组内容; $&:当前匹配的内容; $`:位于匹配子串左侧的文本; $':位于匹配子串右侧的文本 $$:直接量$符号
indexOf:从第一个匹配项的索引
lastIndexOf:找到最后一个匹配项的索引
split:分隔,而且支持正则表达式
分隔示例:
正则表达式:Python中分隔用(),JS中用//,分组也用()。
示例:
.search示例:
.match:加上g能够全局匹配
.replace:替换
示例一:
示例二:
$&:代指已匹配成功的项
$数字:代指匹配成功的某一个组(按照顺序)
跑马灯实例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="i1" style="background-color: palevioletred;color: blueviolet;font-size: 40px;text-align: center">Hello!</div> <script type="text/javascript"> //建立一个计时器setInterval setInterval(function () { //获取id进行操做 d1 = document.getElementById("i1"); //将获取的id中的字符串拿到 d1_text = d1.innerText; first_char = d1_text[0];//字符串索引 sub_char = d1_text.slice(1,d1_text.length);//字符串切片 new_str = sub_char + first_char;;//字符串拼接 d1.innerText = new_str;//将拼接后的字符串从新放入对应id里面 },1000)//每隔一秒执行一次function方法 </script> </body> </html>
布尔类型仅包含真假,与Python不一样的是其首字母小写。
JavaScript中的数组相似于Python中的列表
常见功能:
obj.length 数组的大小 obj.push(ele) 尾部追加元素 obj.pop() 尾部获取一个元素 obj.unshift(ele) 头部插入元素 obj.shift() 头部移除元素 obj.splice(start, deleteCount, value, ...) 插入、删除或替换数组的元素 obj.splice(n,0,val) 指定位置插入元素 obj.splice(n,1,val) 指定位置替换元素 obj.splice(n,1) 指定位置删除元素 obj.slice( ) 切片 obj.reverse( ) 反转 obj.join(sep) 将数组元素链接起来以构建一个字符串 obj.concat(val,..) 链接数组 obj.sort( ) 对数组元素进行排序
示例:
.splice:
经过对象来伪造出来的,而且能够索引取值。
JSON.string(obj):序列化
JSON.parse(str):反序列化
示例:
JavaScript中的eval是Python中eval和exec的合集,既能够编译代码也能够获取返回值。
示例:
JavaScript中支持正则表达式,其主要提供了两个功能:
注:定义正则表达式时,“g”、“i”、“m”分别表示全局匹配,忽略大小写、多行匹配。
经常使用于匹配用户输入的用户名格式、手机号码格式是否正确。
JavaScript中提供了时间相关的操做,时间操做中分为两种时间:
示例:
更多操做参见:http://www.shouce.ren/api/javascript/main.html
JavaScript中支持两个条件语句,分别是:if 和 switch
if语句:
if(条件){
}else if(条件){
}else{
}
switch语句:
switch(变量名){
case '值1':
age = 123;
break;
case '值2':
age = 456;
break;
default:
age = 777;
}
示例:
<body> <script> function f1(name){ switch (name){ case 1: console.log(1); break; case 123: console.log(123); break; default: console.log("default") } } f1(1); f1(123); f1(222); </script> </body>
效果演示图:
JavaScript中支持三种循环语句,分别是:
第一种:
示例1:
li = [11,22,33,44]
for(var item in li){
console.log(item);//索引
console.log(li[item]);
}
结果:
示例2:
dic = {k1:123,k2:456}
for(var item in dic){
console.log(item)//这里的item是key
}
结果:
第二种:
示例1:
for(var i=0;i<5;i++){ console.log(i); }
结果:
示例2:
for(var i=5;i>0;i--){
console.log(i)
}
结果:
示例3:
li = [11,22,33,44] for(var i=0;i<li.length;i++){ console.log(i,li[i]); }
结果:
注:字典不能使用这种循环
示例4:
for(var i=1;i<10;i=i+2){ console.log(i) }
结果:
第三种:
while(条件){
// break;
// continue;
}
try { //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行 } catch (e) { // 若是try代码块中抛出了异常,catch代码块中的代码就会被执行。 //e是一个局部变量,用来指向Error对象或者其余抛出的对象 } finally { //不管try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。 }
注:主动抛出异常 throw Error('xxxx')
JavaScript中函数基本上能够分为一下三类:
// 普通函数 function func(arg){ return true; } // 匿名函数 var func = function(arg){ return "tony"; } // 自执行函数 (function(arg){ console.log(arg); })('123')
注:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了全部实际参数。而且还能够大于形式参数,可是只会执行形式参数数量。要想所有执行大于形参的实参,就要用arguments。
自执行函数示例:
name = "hello";
function f1() {
var name = "world";
function f2() {
alert(name);
}
f2()
}
f1();
执行f1函数时,自动执行了f2函数结果是:world。
老师详细解释了做用域:http://www.cnblogs.com/wupeiqi/p/5649402.html
JavaScript中每一个函数都有本身的做用域,当出现函数嵌套时,就出现了做用域链。当内层函数使用变量时,会根据做用域链从内到外一层层的循环,若是不存在,则异常。
切记:全部的做用域在建立函数且未执行时候就已经存在。
name = "hello";
function f1() {
var name = "world";
function f2() {
alert(name);
}
return f2
}
var ret = f1();
ret();
有点相似于装饰器。实行f1,返回了f2,赋值给ret,而后ret(),去执行f2,返回world。由于做用域链是从内到外循环进行寻找。
注:声明提早,在JavaScript引擎“预编译”时进行。
「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(一般是一个函数),于是这些变量也是该表达式的一部分。
简单来讲闭包是个函数,而它「记住了周围发生了什么」(函数里面嵌套函数)。表现为由「一个函数」体中定义了「另个函数」。
因为做用域链只能从内向外找,默认外部没法获取函数内部变量。闭包,在外部获取函数内部的变量。
示例:
function f2(){
var arg= [11,22];
function f3(){
return arg;
}
return f3;
}
ret = f2();
ret();
在JS里面没有class,惟一有的是函数。这里的函数能够充当class的效果。
示例:
function Foo (name,age) {
this.Name = name;
this.Age = age;
this.Func = function(arg){
return this.Name + arg;
}
}
var obj = new Foo('alex', 18);
var ret = obj.Func("sb");
console.log(ret);
对于上述代码须要注意:
上述代码中每一个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和能够解决该问题:
function Foo(name,age) {//相似建立一个类Foo,而且建立了Foo类的构造方法
this.Name = name;//this至关于self。这里至关于设置构造方法
this.Age = age;
}
Foo.prototype = {//建立原型:至关于类里面的方法。prototype是关键字
f1:function () {
return this.Name + this.Age
}
};
obj = new Foo("alex",35);
ret = obj.f1();
console.log(ret);
另外一种写法(推荐,由于JS源码里面是这种格式):
function Foo(name,age) {//相似建立一个类Foo,而且建立了Foo类的构造方法
this.Name = name;//this至关于self。这里至关于设置构造方法
this.Age = age;
}
Foo.prototype.f1 = function(){return this.Name + this.Age}