Javascript综合笔记

Javascript

最初目的:表单验证

网景(浏览器制造商)聘请了javascript之父布兰登.艾奇两周之内开发一门能够运行客户端上的脚本语言,支持验证。将java精简化,但是布兰登艾奇借鉴了四门语言,单独没有抄java,用了8天时间创建了liveScript。但是网景借助java噱头将livescript改名成javascript;

IE创建类似javascript的,叫做JScript;

网景就主动将javascript交给了欧洲计算机制造商协会(ECMA,出了一关于javascript的标准,叫做ECMAScript;------ES标准

ES1   ES2.....      ES5目前市场所使用的javascript的标准,2015ES6出现了。

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      会出现NaNnot 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

全是   number0,会返回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

booleanfalsestring””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   ---->number0返回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的标准,2015ES6出现了。

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      会出现NaNnot 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

全是   number0,会返回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

booleanfalsestring””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   ---->number0返回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);

 

 

 

原文地址:https://www.cnblogs.com/yaomengli/p/6900644.html