Javascript
最初目的:表单验证
网景(浏览器制造商)聘请了javascript之父布兰登.艾奇两周之内开发一门能够运行客户端上的脚本语言,支持验证。将java精简化,但是布兰登艾奇借鉴了四门语言,单独没有抄java,用了8天时间创建了liveScript。但是网景借助java噱头将livescript改名成javascript;
IE创建类似javascript的,叫做JScript;
网景就主动将javascript交给了欧洲计算机制造商协会(ECMA),出了一关于javascript的标准,叫做ECMAScript;------ES标准
ES1 ES2..... ES5目前市场所使用的javascript的标准,2015年ES6出现了。
Javascript语法核心:
DOM
ECMAScript标准
BOM
ECMAScript标准:
变量,常量,关键字,保留字,语法.....
Javascript写法:
在html中书写javascript代码要放在script标签里面
<script>
//写javascript代码
</script>
alert(“文字内容”)--------弹出里面书写的文字
Console.log(“文字内容”)------在控制台打印javascript代码(文
字内容)
如果alert,console.log里面的内容是定义的变量或常量,那么就不需要加上引号,直接写变量名或者常量名,系统就会自动打印出变量值或者常量值;
如果里面是自定义的内容,除了阿拉数字以外都要加上双引号,否则会报错,系统会默认没加引号的内容是一个变量,会报这个变量not define;
Javascript的变量:
变量:在内存存储中能够发生变化的数值,我们就称为变量;
常量:在内存存储中不会发生变化的数值,我们就称为常量;
变量的定义:
通过一个关键字 var 变量名=变量值;
Var----在系统开辟一块内存,用来存储后面对应变量名的变量值,如果变量名已经定义过了,以后使用就可以不用这个var来定义;
常量的定义:
Const 常量名=常量值;
关键字:
Var const if else while ......
关键字注意点:
第一个系统取好的名字,平时定义变量或常量就不要和系统定义好起冲突;
Var if=”狗子”;----->不推荐
break | else | new | var |
case | finally | return | void |
catch | for | switch | while |
continue | function | this | with |
default | if | throw |
|
delete | in | try |
|
do | instanceof | typeof |
|
预留字
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
|
变量和常量命名规范:
1.命名的开头只能是字母,下划线,$
2.全部命名只能是字母,下划线,$,数字
3.变量都是小写的字母,常量一般都是以大写的字母来命名
4.如果变量名由两个单词组成,前一个小写后一个单词首字母大写(驼峰命名法)
Javascript数据类型
数据类型:系统中存储的数据对应的格式;
Var name=”二狗子”;
Var age=29;
1、基础的数据类型:
String 字符串类型 定义一些描述性的信息,有双引号或单引号包裹的内容;凡是加了双引号或单引号,都是string类型
Number 数值类型 定义数据类型,不加双引号或单引号,一旦加了,typeof 返回string类型;
Boolean 布尔类型,验证逻辑,对true,错false;
Undefined 就是undefined,定义一个变量只给变量名,不给变量赋值时候就会显示undefined(未定义);
Null 就是null,代表是一个空对象;
可以检测数据类型方法:
typeof(数据)
2、复杂的数据类型
存储一个学生的信息;
Var name=”张三”; var age=14; var grade=2;
Var name=”李四”; .....
对象:
Var person1=new Object();----->创建一个对象
给对象添加属性;
Person1.name=”张三”;
Person1.age=14;
Person1.grade=2;
Console.log(person1);
{name: "张三", age: 14, grade: "二年级"}
//name,age,grade------->key键
//”张三”,14,”二年级”------>value值
对象就是由多个键值对组成由花括号包裹由英文逗号分隔的数据;
给对象添加属性:
通过对象名 . 属性名=属性值;
如何取出对象里面属性值;
通过对象名.属性名
数组:
计算班级的平均分
将一类数据综合到一起,以便于下一步计算;
创建数组:
Var arr=new Array();
给数组里面追加数据:
1.var arr=new Array(1,2,3,4);
2.arr[0]=1;arr[1]=2;arr[2]=3;arr[3]=4;//通过数组的下标去添加数据
下标从0开始的;
如果只定义arr[5]=100;
[undefined,undefined,undefined,undefined,undefined,100];
数据的运算:
加,减,乘,除,取余
加法:
String:
String +string 字符串会拼接到一起
String+number 字符串会拼接
String+boolean 字符串拼接
String+undefined 字符串拼接
String+null 字符串拼接
总结:字符串和任何类型相加会进行字符串拼接;
Number:
Number+number 会正常的相加
Number+string 字符串拼接
Number+boolean 当数值和布尔类型相加,布尔类型会自动转化成数字类型,true--->1,false---->0;
Number+undefined 会出现NaN(not a number),他是一个不是数字的数字;
Number+null null会转化成0,再做加法
Boolean:
Boolean+string 字符串拼接
Boolean+number 同上
Boolean+boolean true-->1 false-->0
Boolean+undefined NaN
Boolean+null null-->0
Undefined:
Undefined+string 拼接
Undefined+number NaN
Undefined+boolean NaN
Undefined+undefined NaN
Undefined+null NaN
总结:undefined类型除了和字符串相加以外,其他的都是NaN;
Null:
Null+string 拼接
Null+number null->0
Null+boolean null->0 true-->1 false-->0
Null+undefined NaN
Null+null 0 null-->0
减法:
String:(字符串全是阿拉伯数字,不全是阿拉伯数字)
String-string 如果字符串都是阿拉伯数字,那么会做正常的减法运算,如果是普通字符串则会是NaN;
String-number 如果字符串都是阿拉伯数字,那么会做正常的减法运算,如果是普通字符串则会是NaN;
String-boolean 全是阿拉伯数字的string--->number true-->1 false-->0,如果不全是阿拉伯数字,则结果是NaN
String-undefined NaN
String-null 全是:string-->number null-->0
不全是:NaN
总结:字符串如果不全是阿拉伯数字,那么减法运算返回的结果都是NaN;
Boolean:
Boolean-string
Boolean-boolean
Boolean-number
Boolean-undefined
Boolean-null
Number
Number-string
1.全是阿拉伯数字 string-->number
2.不全是 NaN
Number-boolean
True--->1 false----->0
Number-number
Number-undefined---->NaN
Number-null null---->0
Undefined
undefined做减法,乘法,除法,取模运算返回的结果都是NaN;
Null
Null--->0
乘法:
String
String*string
String*boolean
String*number
String*undefined
string*null null-->0
1.全是阿拉伯数字 string--->number;boolean->number
2.不全是阿拉伯数字 返回结果就是NaN
Boolean
Boolean*string
Boolean*boolean boolean--->number
Boolean*number boolean--->number
Boolean*undefined
Boolean*null 0
Number
Number*string
Number*boolean
Number*number
Number*undefined
Number*null
Undefined
NaN
Null
正常能自动类型的数和null做乘法运算返回的结果都是0;
除法:(分母不能0)
String/string
全是 分母为”0”,””,会返回Infinity,其他的正常运算
String/number
全是 number为0,会返回infinity,其他的正常运算
String/boolean true-->1返回分子,false--->0 返回infinity
String/undefined
String/null infinity
不全是 NaN
当分母(被除数)为0的时候,除了分子不为0,返回的都是infinity,如果分子为0,则返回NaN
Number/string string=”” 或0 ---->infinity
Number/boolean
Number/number
Number/undefined
Number/null
Boolean/string boolean--->number true--->1 false--->0
当boolean为false,string为””或0返回的就是NaN
Boolean/boolean
Boolean/number
Boolean/undefined
Boolean/null
Undefined除以任何数都是NaN
Null除以任何数null---->0,分母是0,返回NaN,分母不为0,返回0
Null/string
Null/boolean
取模:(取余)
运算符%
String%string 分母为”0”或””,返回NaN;分子如果为0,分母不为0,返回0;分子为0,分母也为0,返回NaN
String%number ---->number为0返回NaN
String%boolean---->true返回分子本身,false返回NaN
String%undefined
String%null ---->NaN
Number%string string为”0”或””,返回NaN
Number%number 分母是否为0
Number%boolean
Boolean%string
Boolean%boolean
Boolean%number
ECMAScript的语句
==和=和===和!=和!==的去区别与联系
==和= ==是判断是否相等,=是赋值;
==和===
==是能够支持自动类型转化的,能够转换成相等那就相等
===恒等于,不仅数值一样,类型也要一样,严格意义上的相等;
!=和== !=不等于
!=和!== !==不仅要求数值不相等而且要求数据类型也不同
一元运算符
++ --
a++;====>a=a+1;
a--;=====>a=a-1;
i++是先赋值后自增;
++i是先自增后赋值;
大于小于运算
大于>
小于<
大于等于>=
小于等于<=
条件自动类型转换
只有字符串为空会转换成false,其他都转换成true---->string
只有数值为0的时候转换成false,其他的都转换成true----->number
Undefined---->false
Null---->false
0-->false
“”-->false
“0”-->true
“二狗子”--->true
1--->true
11-->true
-1-->true
逻辑运算符
&&:并且 前后有两个条件,只有两个条件同时为真,那么才会返回真,只要有一个条件为假,那么久返回假;
|| :或者 前后有两个条件,只要有一个条件为真那么返回的结果就是真,如果两个都为假,才返回假;
!: 不是,非 只有一个条件,如果条件为真,就返回假,如果条件为假,返回就是真;
三目运算:(三元运算符)
条件 ? 语句一 : 语句二 ;
条件如果为真那么就执行语句一;
条件如果为假那么就执行语句二;
判断语句
含义:当程序满足某种条件执行的语句,不满足执行另外一条语句;
if(条件语句){
//满足条件执行的语句
}else{
//不满足条件执行的语句
}
简化版:当满足条件就执行语句,不满足就什么都不做
If(条件语句){语句}
If(条件语句) 语句;
多条件判断
If(条件一){
//满足条件一的语句
}else if(条件二){
//满足条件二的语句
}else if(条件N){
//满足条件N的语句
}else{
//以上条件都不满足的语句
}
多分支语句
Switch(条件){
Case 条件一:
语句一;
Break;
Case 条件二:
语句二;
Break;
....
Default:
语句;
Break;
}
Break;是程序中断,跳出本级语句;
Default:默认语句,当上面条件都不满足时所执行的语句;
循环语句
for
for(var i=0;i<10;i++){
//循环体
}
Var i=0;初始化一个计数器;
i<10; 条件
i++;自增计数器;
//执行的过程
第一步:初始化计数器,var i=0;计数器从0开始;
第二步:判断条件,i<10;条件是否满足,如果满足就执行循环体里面的语句,不满足就退出循环,执行for循环之后的语句;
第三步:执行i++,执行计数器自增;
第四步:在判断条件i<10,如果满足就再继续执行循环体里面的语句,不满足就退出循环;
第五步:一直到计数器自增到不满足条件之后,结束本次循环;
do...while
do{
//循环体
//计数器
}while(条件);
Do..while执行步骤
第一步:执行do里面的循环体语句
第二步:执行while括号里面的判断条件,如果条件满足,就再执行do里面的循环体,如果条件不满足,则退出本次循环;
注意点:不管条件是否满足,循环体至少执行一次;
复杂数据类型的方法:
Object Array
如何创建一个对象?
Var obj=new Object();
如何给对象添加属性?
obj.name=”张三”;
obj.age=28;
如何创建一个数组?
var arr=new Array();
如何给数组追加数据?
var arr=new Array(1,2,3,4,5);
arr[0]=1;
arr[1]=2;
...
对象有哪些方法?
取出变量里面的属性值;
obj={name:”李四”,age:23,height:”160cm”}
取出身高
alert(obj.height);//160cm
如何将所有的属性名key和属性值value全部取出来?
for...in
for(key in 对象名){
console.log(key);
console.log(对象名[key])//value
}
数组的方法:
var arr=new Array(“二狗子”,”狗子”,1,2,”狗蛋”,null,undefined);
获取数组的长度:
数组名.length------>返回number类型的数组长度
获取数组中每一项的值:
用for循环来取数组中的每一项,一般循环是从0开始,因为数组中存储数据从下标0存储的,循环数组的长度次,取到最后一个数据是下标为长度-1;
向数组中添加数据
向数组的最后一项添加数据
arr.push(“数据”);
向数组开头添加数据
arr.unshift(“数据”);
删除数组的某项下标的数据
arr.Splice(下标值,删除的长度,[向删除的数组后面添加新的数据]);
查找数组某项数据的下标值
arr.indexOf(“要查询的数据”);
如果查询到数据就返回数据在数组中存储的下标值,如果找不到就会返回-1;
数组的拼接
将两个数组组合成一个新的数组,不会对原来的两个数组造成影响,拼接完的数组要用新的变量去保存;
arr.concat(arr1)
//arr数组一
//arr1数组二
数组的裁剪
arr.slice(start,end); 裁剪的区间[start,end-1]
start开始裁剪的下标
end 结束裁剪的下标,不包括当前结束这项,裁剪到end-1下标前的数据
裁剪的数组不会影响原来的数组,所以裁剪完的数组要用新的变量去保存
数组的排序
arr.sort()在原数组之前排序的,排序后的数据对原数组是有影响的;
默认的排序方式是以字符串大小来排序,字符编码来排序;
按照数值来排序需要定义一个规则
arr.sort(function(a,b){return a-b})按照从小到大的方式来排列
arr.sort(function(a,b){return b-a})按照从大到小的方式来排列
*数组与字符串类型的相互转换
含义:将字符串类型的数据转换成数组类型的数据,将数组类型的数据转换成字符串类型的数据
var arr=new Array(1,2,3); [1,2,3]==>1,2,3
字符串--->数组
Str.split(参数)
参数:代表以什么样的方式去分隔字符串,如果不加那么就不分隔。
参数一般有””,就以单个字符串分隔;
注意点:split方法对原字符串没有影响,所以新分隔成数组的数据要以变量去保存;
数组--->字符串
arr.join(参数);
参数如果为””,就会将数组中所有的项拼接成一个整的字符串;如果带有参数,就会保留原有数组中的逗号;
注意点:join方法对原数组没有影响,所以新组合成的字符串要以变量去保存;
Javascript的内置对象
内置对象:javascript定义好的对象,使用的时候直接用new 来创建;
时间、日期对象:
创建:var time=new Date();
Time完整的包括星期几 月份 几号 年份 时分秒的信息;
获取当前是星期几
time.getDay();
星期日返回0,星期一返回1.....
获取年份
time.getFullYear();
获取月份
time.getMonth();
一月份返回 0
月份返回都比当前月小1;
获取日期
time.getDate();
给定一个年份,如何判断是不是闰年?
//判断条件?
能被4整除且不能被100整除的为闰年.
Var year=2017;
If(year%4==0&&year%100!=0){
alert(“闰年”)
}else{
alert(“平年”)
}
定时器:
setTimeout(fun,1000);---->当网页加载后延迟1秒执行一次fun
setInterval(fun,1000);----->每隔1秒就执行一次fun
//fun 要执行的函数
//1000ms==1秒
函数:
Javascript中函数是第一公民。
作用:将一些重复性的代码进行封装,以便于以后的重复使用;
定义:
方法名一定要严格遵循小驼峰命名法,不能与系统保留字和关键字重名;
第一种方式:
function 方法名(){
//方法体
}
第二种方式(声明定义)
Var 方法名=function (){
//方法体
}
调用(执行)方法:
方法名();
好处:
1、节省代码的数量
2、方便修改代码
3、有利于代码的阅读
带参函数:
定义:function 方法名(形式参数一,形式参数二....){
}
Var 方法名=function(形式参数一,形式参数二){
}
调用:
方法名(实参一,实参二....);
arguments数组:存储带参函数调用时传过来的实参信息,是一个数组格式;
Return关键字:
结束本次方法,返回后面的参数
作用域
在javascript中变量分为两种,第一种叫做全局变量,第二种叫做局部变量;
全局变量:在程序中任何地方都可以使用的变量;
局部变量:(只能在方法体内定义)在某个方法体内定义的,只能在该方法体内使用该变量,出了这个方法,变量就会被销毁;在javascriptES5中只有方法里面可以定义局部变量;局部变量是不能够在全局使用的;
不用var声明的变量在任何地方声明都是全局变量;
作用域:每定义一个方法的时候系统就会开辟出一个作用域,在作用域里面,子级的作用域可以使用父级作用域里面的属性和方法,父级作用域是无法访问到自己作用域下面的 属性和方法的;
子级里面的使用某个属性或方法,会首先在对应子级作用域里面去查找,如果没有就会返回父级去查找,父级如果定义了就是用父级的属性或方法,父级如果也没有就一直向上找到全局作用域,全局作用域如果也没有定义那么就会报这个变量is not defined;
递归函数
含义:函数自己调用自己;
字符串方法:(所有字符串方法都不会改变原字符串,所以要用新的变量去保存)
Var str=”狗子”;
获取字符串的长度
Str.length
裁剪字符串
Str.slice(start,end+1);
Str.substr(start,end+1);
Str.substring(start,end+1);
字符串裁剪函数不会影响原来的字符串,所以新裁剪的字符串要用变量去保存;
获取字符串中某个字符的下标
str.indexOf(“狗”);
获取重复的最后一个下标
str.lastIndexOf()
字符串替换
Str.replace(要替换的字符,替换后的字符);
不会影响原字符串,所以要用新的变量来保存;
字符串全大写方法
Var str=”aAbsssC”;
str.toUpperCase()
字符串全小写
str.toLowerCase()
字符串拼接
Str.concat(str1);
Javascript
最初目的:表单验证
网景(浏览器制造商)聘请了javascript之父布兰登.艾奇两周之内开发一门能够运行客户端上的脚本语言,支持验证。将java精简化,但是布兰登艾奇借鉴了四门语言,单独没有抄java,用了8天时间创建了liveScript。但是网景借助java噱头将livescript改名成javascript;
IE创建类似javascript的,叫做JScript;
网景就主动将javascript交给了欧洲计算机制造商协会(ECMA),出了一关于javascript的标准,叫做ECMAScript;------ES标准
ES1 ES2..... ES5目前市场所使用的javascript的标准,2015年ES6出现了。
Javascript语法核心:
DOM
ECMAScript标准
BOM
ECMAScript标准:
变量,常量,关键字,保留字,语法.....
Javascript写法:
在html中书写javascript代码要放在script标签里面
<script>
//写javascript代码
</script>
alert(“文字内容”)--------弹出里面书写的文字
Console.log(“文字内容”)------在控制台打印javascript代码(文
字内容)
如果alert,console.log里面的内容是定义的变量或常量,那么就不需要加上引号,直接写变量名或者常量名,系统就会自动打印出变量值或者常量值;
如果里面是自定义的内容,除了阿拉数字以外都要加上双引号,否则会报错,系统会默认没加引号的内容是一个变量,会报这个变量not define;
Javascript的变量:
变量:在内存存储中能够发生变化的数值,我们就称为变量;
常量:在内存存储中不会发生变化的数值,我们就称为常量;
变量的定义:
通过一个关键字 var 变量名=变量值;
Var----在系统开辟一块内存,用来存储后面对应变量名的变量值,如果变量名已经定义过了,以后使用就可以不用这个var来定义;
常量的定义:
Const 常量名=常量值;
关键字:
Var const if else while ......
关键字注意点:
第一个系统取好的名字,平时定义变量或常量就不要和系统定义好起冲突;
Var if=”狗子”;----->不推荐
break | else | new | var |
case | finally | return | void |
catch | for | switch | while |
continue | function | this | with |
default | if | throw |
|
delete | in | try |
|
do | instanceof | typeof |
|
预留字
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
|
变量和常量命名规范:
1.命名的开头只能是字母,下划线,$
2.全部命名只能是字母,下划线,$,数字
3.变量都是小写的字母,常量一般都是以大写的字母来命名
4.如果变量名由两个单词组成,前一个小写后一个单词首字母大写(驼峰命名法)
Javascript数据类型
数据类型:系统中存储的数据对应的格式;
Var name=”二狗子”;
Var age=29;
1、基础的数据类型:
String 字符串类型 定义一些描述性的信息,有双引号或单引号包裹的内容;凡是加了双引号或单引号,都是string类型
Number 数值类型 定义数据类型,不加双引号或单引号,一旦加了,typeof 返回string类型;
Boolean 布尔类型,验证逻辑,对true,错false;
Undefined 就是undefined,定义一个变量只给变量名,不给变量赋值时候就会显示undefined(未定义);
Null 就是null,代表是一个空对象;
可以检测数据类型方法:
typeof(数据)
2、复杂的数据类型
存储一个学生的信息;
Var name=”张三”; var age=14; var grade=2;
Var name=”李四”; .....
对象:
Var person1=new Object();----->创建一个对象
给对象添加属性;
Person1.name=”张三”;
Person1.age=14;
Person1.grade=2;
Console.log(person1);
{name: "张三", age: 14, grade: "二年级"}
//name,age,grade------->key键
//”张三”,14,”二年级”------>value值
对象就是由多个键值对组成由花括号包裹由英文逗号分隔的数据;
给对象添加属性:
通过对象名 . 属性名=属性值;
如何取出对象里面属性值;
通过对象名.属性名
数组:
计算班级的平均分
将一类数据综合到一起,以便于下一步计算;
创建数组:
Var arr=new Array();
给数组里面追加数据:
1.var arr=new Array(1,2,3,4);
2.arr[0]=1;arr[1]=2;arr[2]=3;arr[3]=4;//通过数组的下标去添加数据
下标从0开始的;
如果只定义arr[5]=100;
[undefined,undefined,undefined,undefined,undefined,100];
数据的运算:
加,减,乘,除,取余
加法:
String:
String +string 字符串会拼接到一起
String+number 字符串会拼接
String+boolean 字符串拼接
String+undefined 字符串拼接
String+null 字符串拼接
总结:字符串和任何类型相加会进行字符串拼接;
Number:
Number+number 会正常的相加
Number+string 字符串拼接
Number+boolean 当数值和布尔类型相加,布尔类型会自动转化成数字类型,true--->1,false---->0;
Number+undefined 会出现NaN(not a number),他是一个不是数字的数字;
Number+null null会转化成0,再做加法
Boolean:
Boolean+string 字符串拼接
Boolean+number 同上
Boolean+boolean true-->1 false-->0
Boolean+undefined NaN
Boolean+null null-->0
Undefined:
Undefined+string 拼接
Undefined+number NaN
Undefined+boolean NaN
Undefined+undefined NaN
Undefined+null NaN
总结:undefined类型除了和字符串相加以外,其他的都是NaN;
Null:
Null+string 拼接
Null+number null->0
Null+boolean null->0 true-->1 false-->0
Null+undefined NaN
Null+null 0 null-->0
减法:
String:(字符串全是阿拉伯数字,不全是阿拉伯数字)
String-string 如果字符串都是阿拉伯数字,那么会做正常的减法运算,如果是普通字符串则会是NaN;
String-number 如果字符串都是阿拉伯数字,那么会做正常的减法运算,如果是普通字符串则会是NaN;
String-boolean 全是阿拉伯数字的string--->number true-->1 false-->0,如果不全是阿拉伯数字,则结果是NaN
String-undefined NaN
String-null 全是:string-->number null-->0
不全是:NaN
总结:字符串如果不全是阿拉伯数字,那么减法运算返回的结果都是NaN;
Boolean:
Boolean-string
Boolean-boolean
Boolean-number
Boolean-undefined
Boolean-null
Number
Number-string
1.全是阿拉伯数字 string-->number
2.不全是 NaN
Number-boolean
True--->1 false----->0
Number-number
Number-undefined---->NaN
Number-null null---->0
Undefined
undefined做减法,乘法,除法,取模运算返回的结果都是NaN;
Null
Null--->0
乘法:
String
String*string
String*boolean
String*number
String*undefined
string*null null-->0
1.全是阿拉伯数字 string--->number;boolean->number
2.不全是阿拉伯数字 返回结果就是NaN
Boolean
Boolean*string
Boolean*boolean boolean--->number
Boolean*number boolean--->number
Boolean*undefined
Boolean*null 0
Number
Number*string
Number*boolean
Number*number
Number*undefined
Number*null
Undefined
NaN
Null
正常能自动类型的数和null做乘法运算返回的结果都是0;
除法:(分母不能0)
String/string
全是 分母为”0”,””,会返回Infinity,其他的正常运算
String/number
全是 number为0,会返回infinity,其他的正常运算
String/boolean true-->1返回分子,false--->0 返回infinity
String/undefined
String/null infinity
不全是 NaN
当分母(被除数)为0的时候,除了分子不为0,返回的都是infinity,如果分子为0,则返回NaN
Number/string string=”” 或0 ---->infinity
Number/boolean
Number/number
Number/undefined
Number/null
Boolean/string boolean--->number true--->1 false--->0
当boolean为false,string为””或0返回的就是NaN
Boolean/boolean
Boolean/number
Boolean/undefined
Boolean/null
Undefined除以任何数都是NaN
Null除以任何数null---->0,分母是0,返回NaN,分母不为0,返回0
Null/string
Null/boolean
取模:(取余)
运算符%
String%string 分母为”0”或””,返回NaN;分子如果为0,分母不为0,返回0;分子为0,分母也为0,返回NaN
String%number ---->number为0返回NaN
String%boolean---->true返回分子本身,false返回NaN
String%undefined
String%null ---->NaN
Number%string string为”0”或””,返回NaN
Number%number 分母是否为0
Number%boolean
Boolean%string
Boolean%boolean
Boolean%number
ECMAScript的语句
==和=和===和!=和!==的去区别与联系
==和= ==是判断是否相等,=是赋值;
==和===
==是能够支持自动类型转化的,能够转换成相等那就相等
===恒等于,不仅数值一样,类型也要一样,严格意义上的相等;
!=和== !=不等于
!=和!== !==不仅要求数值不相等而且要求数据类型也不同
一元运算符
++ --
a++;====>a=a+1;
a--;=====>a=a-1;
i++是先赋值后自增;
++i是先自增后赋值;
大于小于运算
大于>
小于<
大于等于>=
小于等于<=
条件自动类型转换
只有字符串为空会转换成false,其他都转换成true---->string
只有数值为0的时候转换成false,其他的都转换成true----->number
Undefined---->false
Null---->false
0-->false
“”-->false
“0”-->true
“二狗子”--->true
1--->true
11-->true
-1-->true
逻辑运算符
&&:并且 前后有两个条件,只有两个条件同时为真,那么才会返回真,只要有一个条件为假,那么久返回假;
|| :或者 前后有两个条件,只要有一个条件为真那么返回的结果就是真,如果两个都为假,才返回假;
!: 不是,非 只有一个条件,如果条件为真,就返回假,如果条件为假,返回就是真;
三目运算:(三元运算符)
条件 ? 语句一 : 语句二 ;
条件如果为真那么就执行语句一;
条件如果为假那么就执行语句二;
判断语句
含义:当程序满足某种条件执行的语句,不满足执行另外一条语句;
if(条件语句){
//满足条件执行的语句
}else{
//不满足条件执行的语句
}
简化版:当满足条件就执行语句,不满足就什么都不做
If(条件语句){语句}
If(条件语句) 语句;
多条件判断
If(条件一){
//满足条件一的语句
}else if(条件二){
//满足条件二的语句
}else if(条件N){
//满足条件N的语句
}else{
//以上条件都不满足的语句
}
多分支语句
Switch(条件){
Case 条件一:
语句一;
Break;
Case 条件二:
语句二;
Break;
....
Default:
语句;
Break;
}
Break;是程序中断,跳出本级语句;
Default:默认语句,当上面条件都不满足时所执行的语句;
循环语句
for
for(var i=0;i<10;i++){
//循环体
}
Var i=0;初始化一个计数器;
i<10; 条件
i++;自增计数器;
//执行的过程
第一步:初始化计数器,var i=0;计数器从0开始;
第二步:判断条件,i<10;条件是否满足,如果满足就执行循环体里面的语句,不满足就退出循环,执行for循环之后的语句;
第三步:执行i++,执行计数器自增;
第四步:在判断条件i<10,如果满足就再继续执行循环体里面的语句,不满足就退出循环;
第五步:一直到计数器自增到不满足条件之后,结束本次循环;
do...while
do{
//循环体
//计数器
}while(条件);
Do..while执行步骤
第一步:执行do里面的循环体语句
第二步:执行while括号里面的判断条件,如果条件满足,就再执行do里面的循环体,如果条件不满足,则退出本次循环;
注意点:不管条件是否满足,循环体至少执行一次;
复杂数据类型的方法:
Object Array
如何创建一个对象?
Var obj=new Object();
如何给对象添加属性?
obj.name=”张三”;
obj.age=28;
如何创建一个数组?
var arr=new Array();
如何给数组追加数据?
var arr=new Array(1,2,3,4,5);
arr[0]=1;
arr[1]=2;
...
对象有哪些方法?
取出变量里面的属性值;
obj={name:”李四”,age:23,height:”160cm”}
取出身高
alert(obj.height);//160cm
如何将所有的属性名key和属性值value全部取出来?
for...in
for(key in 对象名){
console.log(key);
console.log(对象名[key])//value
}
数组的方法:
var arr=new Array(“二狗子”,”狗子”,1,2,”狗蛋”,null,undefined);
获取数组的长度:
数组名.length------>返回number类型的数组长度
获取数组中每一项的值:
用for循环来取数组中的每一项,一般循环是从0开始,因为数组中存储数据从下标0存储的,循环数组的长度次,取到最后一个数据是下标为长度-1;
向数组中添加数据
向数组的最后一项添加数据
arr.push(“数据”);
向数组开头添加数据
arr.unshift(“数据”);
删除数组的某项下标的数据
arr.Splice(下标值,删除的长度,[向删除的数组后面添加新的数据]);
查找数组某项数据的下标值
arr.indexOf(“要查询的数据”);
如果查询到数据就返回数据在数组中存储的下标值,如果找不到就会返回-1;
数组的拼接
将两个数组组合成一个新的数组,不会对原来的两个数组造成影响,拼接完的数组要用新的变量去保存;
arr.concat(arr1)
//arr数组一
//arr1数组二
数组的裁剪
arr.slice(start,end); 裁剪的区间[start,end-1]
start开始裁剪的下标
end 结束裁剪的下标,不包括当前结束这项,裁剪到end-1下标前的数据
裁剪的数组不会影响原来的数组,所以裁剪完的数组要用新的变量去保存
数组的排序
arr.sort()在原数组之前排序的,排序后的数据对原数组是有影响的;
默认的排序方式是以字符串大小来排序,字符编码来排序;
按照数值来排序需要定义一个规则
arr.sort(function(a,b){return a-b})按照从小到大的方式来排列
arr.sort(function(a,b){return b-a})按照从大到小的方式来排列
*数组与字符串类型的相互转换
含义:将字符串类型的数据转换成数组类型的数据,将数组类型的数据转换成字符串类型的数据
var arr=new Array(1,2,3); [1,2,3]==>1,2,3
字符串--->数组
Str.split(参数)
参数:代表以什么样的方式去分隔字符串,如果不加那么就不分隔。
参数一般有””,就以单个字符串分隔;
注意点:split方法对原字符串没有影响,所以新分隔成数组的数据要以变量去保存;
数组--->字符串
arr.join(参数);
参数如果为””,就会将数组中所有的项拼接成一个整的字符串;如果带有参数,就会保留原有数组中的逗号;
注意点:join方法对原数组没有影响,所以新组合成的字符串要以变量去保存;
Javascript的内置对象
内置对象:javascript定义好的对象,使用的时候直接用new 来创建;
时间、日期对象:
创建:var time=new Date();
Time完整的包括星期几 月份 几号 年份 时分秒的信息;
获取当前是星期几
time.getDay();
星期日返回0,星期一返回1.....
获取年份
time.getFullYear();
获取月份
time.getMonth();
一月份返回 0
月份返回都比当前月小1;
获取日期
time.getDate();
给定一个年份,如何判断是不是闰年?
//判断条件?
能被4整除且不能被100整除的为闰年.
Var year=2017;
If(year%4==0&&year%100!=0){
alert(“闰年”)
}else{
alert(“平年”)
}
定时器:
setTimeout(fun,1000);---->当网页加载后延迟1秒执行一次fun
setInterval(fun,1000);----->每隔1秒就执行一次fun
//fun 要执行的函数
//1000ms==1秒
函数:
Javascript中函数是第一公民。
作用:将一些重复性的代码进行封装,以便于以后的重复使用;
定义:
方法名一定要严格遵循小驼峰命名法,不能与系统保留字和关键字重名;
第一种方式:
function 方法名(){
//方法体
}
第二种方式(声明定义)
Var 方法名=function (){
//方法体
}
调用(执行)方法:
方法名();
好处:
1、节省代码的数量
2、方便修改代码
3、有利于代码的阅读
带参函数:
定义:function 方法名(形式参数一,形式参数二....){
}
Var 方法名=function(形式参数一,形式参数二){
}
调用:
方法名(实参一,实参二....);
arguments数组:存储带参函数调用时传过来的实参信息,是一个数组格式;
Return关键字:
结束本次方法,返回后面的参数
作用域
在javascript中变量分为两种,第一种叫做全局变量,第二种叫做局部变量;
全局变量:在程序中任何地方都可以使用的变量;
局部变量:(只能在方法体内定义)在某个方法体内定义的,只能在该方法体内使用该变量,出了这个方法,变量就会被销毁;在javascriptES5中只有方法里面可以定义局部变量;局部变量是不能够在全局使用的;
不用var声明的变量在任何地方声明都是全局变量;
作用域:每定义一个方法的时候系统就会开辟出一个作用域,在作用域里面,子级的作用域可以使用父级作用域里面的属性和方法,父级作用域是无法访问到自己作用域下面的 属性和方法的;
子级里面的使用某个属性或方法,会首先在对应子级作用域里面去查找,如果没有就会返回父级去查找,父级如果定义了就是用父级的属性或方法,父级如果也没有就一直向上找到全局作用域,全局作用域如果也没有定义那么就会报这个变量is not defined;
递归函数
含义:函数自己调用自己;
字符串方法:(所有字符串方法都不会改变原字符串,所以要用新的变量去保存)
Var str=”狗子”;
获取字符串的长度
Str.length
裁剪字符串
Str.slice(start,end+1);
Str.substr(start,end+1);
Str.substring(start,end+1);
字符串裁剪函数不会影响原来的字符串,所以新裁剪的字符串要用变量去保存;
获取字符串中某个字符的下标
str.indexOf(“狗”);
获取重复的最后一个下标
str.lastIndexOf()
字符串替换
Str.replace(要替换的字符,替换后的字符);
不会影响原字符串,所以要用新的变量来保存;
字符串全大写方法
Var str=”aAbsssC”;
str.toUpperCase()
字符串全小写
str.toLowerCase()
字符串拼接
Str.concat(str1);