当前位置: 代码迷 >> 综合 >> js-基本知识(二)
  详细解决方案

js-基本知识(二)

热度:22   发布时间:2023-11-17 22:33:42.0

1.常量(字面量)

变量类型

构造函数

举例

类型检测typeof

字符串

function String()

var t = "chua";

var m = new String("chua");

"string"

数字

function Number()

var t = 12;

var m = new Number(12);

"number"

布尔

function Boolean()

var t = false;

var m = new Boolean(0);

var m1 = new Boolean(false);

"boolean"

数组

function Array()

var t = [1,2,3];

var m = new Array(1,2,3);

var m1 = new Array(3);

m1[0] = 1;

m1[1] = 2;

m1[2] = 3;

"object"

对象

function Object()

var t = {name:"baiyang" ,

               sex:"女"

             };

var m = new Object({name:"baiyang"});

var m1 = new Object();

m1.name = "chua";

"object"

Null

无,表示不该有值(无效值)

,null 被认为是对象的占位符

var t = null; //注意小写

function m(name){

  if(name == null){alert(name)}

}

m(null); //null

"object"

Undefined

无,表示变量未初始化值或函数中参数没有传递

var t = undefined;//小写

var tUn;

alert(tUn);//undefined

"undefined"

函数

function Function()

var t = function(){}; //构造了一个名为t的函数

"function"

日期类型

function Date()

var t = new Date();//获取当前时间

var m = new Date("January 1,2000 22:00:00");

//设置一个时间

"object"

正则类型

function RegExp(pattern,

attributes)

var t = /\d+/;//匹配一个或多个数字

var m = new RegExp("\\d+");

"object"

Error类型

function Error()

 var t = new Error("语法错误");

alert(t.message); //"语法错误"

"object"

2.变量

JS中变量声明分显式声明和隐式声明。显示声明指使用使用var开头的声明(函数声明除外)。隐式声明指没有使用var明确声明的变量。

各类型变量声明:

//浮点数
var x=3.14;
//字符串中单双引号都可
var y=’3.14’;
//对象
var z={
parent: ”.container”,
children: ’.news’,//对象中最后一个逗号可省也可写
};
//数组
var arr=[18,20,21,24];//数组中最后一个不加逗号
//数据类型嵌套--对象里嵌套数组,对象中嵌套对象
var person = {name: "baiyang",sex:"女",age:23,job:["student","software engineer"],boyfriend:{name:"彭于晏",age:37,job:["actor","singer"]},
};
//数组中嵌套对象
var movie = [{name:"周星驰",age:60},{name:"朱茵",age:50}]
//数组中嵌套数组
var school = [[20,30,30],[21,33,30],[25,35,30]
]
以上可表示一所学校中有三个院系,每个院系下的专业人数

3.原始类型:原始值与引用值

在ECMAScript 中,变量可以存放两种类型的值,即原始值引用值

原始值(primitive value)是存放在栈(stack)中的简单数据字段,也就是说,它们的值直接存储在变量访问的位置。 引用值(reference value)是存储在堆(heap)中的对象,也就是说,存储在变量出的值是一个指针(point),指向存储对象的内存处。

通俗的理解为,引用值是由原始值组成的。

4. JavaScript 数据类型

ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String

引用类型的有:Object、Array、Function

(1)辨别类型 typeof

var a=3.14,b=”3.14”;var c=function(){ }typeof b;

(2) 数据类型转换(+连接的不会转换)

例子:计算两个文本框的和

  •   显式类型转换(强制类型转换)

parseInt()、 parseFloat()

两数相加:类型转换

<input type="number" id="num1"/> + <input type="number" id="num2" /> = <input  type="number" id="num3" /><br>
<input type="button" id="btn" value="submit" />
<script>var num1= document.getElementById('num1');var num2= document.getElementById('num2');var num3 = document.getElementById('num3');var btn = document.getElementById('btn');var num;btn.onclick= function(){num = parseInt( num1.value ) + parseInt( num2.value);num3.value = num;}
</script>

当转换失败之后方法会报NaN(Not A Number)指不是一个数字,可以使用isNaN()方法来检测。

  • 隐式类型转换

某些情况下,javascript会在运算之前做数据类型的隐式转换,代表的运算符有:==(等于)、===(全等)、-(减法)

(3)运算符

  •  算术运算符

给定 y=5,下面的表格解释了这些算术运算符:

运算符

描述

例子

结果

+

x=y+2

x=7

-

x=y-2

x=3

*

x=y*2

x=10

/

x=y/2

x=2.5

%

求余数 (保留整数)

x=y%2

x=1

++

累加

x=++y

x=6

--

递减

x=--y

x=4

  • 赋值运算符

给定 x=10 和 y=5,下面的表格解释了赋值运算符:

运算符

例子

等价于

结果

=

x=y

 

x=5

+=

x+=y

x=x+y

x=15

-=

x-=y

x=x-y

x=5

*=

x*=y

x=x*y

x=50

/=

x/=y

x=x/y

x=2

%=

x%=y

x=x%y

x=0

  • 比较运算符

给定 x=5,下面的表格解释了比较运算符:

运算符

描述

例子

==

等于

x==8 为 false

===

全等(值和类型)

x===5 为 true;x==="5" 为 false

!=

不等于

x!=8 为 true

>

大于

x>8 为 false

<

小于

x<8 为 true

>=

大于或等于

x>=8 为 false

<=

小于或等于

x<=8 为 true

  • 逻辑运算符

给定 x=6 以及 y=3,下表解释了逻辑运算符:

运算符

描述

例子

&&

and

(x < 10 && y > 1) 为 true

||

or

(x==5 || y==5) 为 false

!

not

!(x==y) 为 true

  • 条件运算符(三元运算符)

text=(age<18)?"年龄太小":"年龄已达到";

本质上,条件运算符是if语句的缩写。上面的代码示例,翻译一下即是:

如果age<18==true,text=”年龄太小”

如果age<18==false,text=”年龄已达到”

5.JavaScript 数组

-- 创建方法

(1)常规方式:

var myCars=new Array();myCars[0]="Saab";       myCars[1]="Volvo";myCars[2]="BMW";

(2)简洁方式:

var myCars=new Array("Saab","Volvo","BMW");

(3)字面:

var myCars=["Saab","Volvo","BMW"];

--属性

属性

描述

constructor

返回对创建此对象的数组函数的引用。

length

设置或返回数组中元素的数目。

prototype

使您有能力向对象添加属性和方法。

6.JavaScript 函数(方法)

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

function printFun(i,j){alert(i+j);}

形参:形式上的参数;实参:实际传递的参数。函数内部想要获取实际传参的话,可以使用实参对象arguments,它是一个存储参数的数组。

 

--调用函数

printFun()
printFun(‘hello’,’world’)

--带return的函数

有时,我们会希望函数将值返回调用它的地方。通过使用 return 语句就可以实现。在使用 return 语句时,函数会停止执行,并返回指定的值。

function printFun(i,j){return i%j;
}

--全局变量/局部变量

局部变量:在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。只要函数运行完毕,本地变量就会被删除。

全局变量:在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量的生存期:JavaScript 变量的生命期从它们被声明的时间开始。局部变量会在函数运行以后被删除。全局变量会在页面关闭后被删除。

隐式声明如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明

例如:carname="Volvo";

将声明一个全局变量 carname,即使它在函数内执行。

7.作用域/闭包

在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。

闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!

 

 

例1:

function outerFun(){
  a =0;
  alert(a); 

}
var a=4;
outerFun(); //结果为0
alert(a);   //结果为0


例2:

function outerFun()
{
var a=0;
  function innerFun(){

a++;

alert(a);

}

return innerFun;

}
var obj=outerFun();
obj();  //结果为1
obj();  //结果为2
var obj2=outerFun();
obj2();  //结果为1
obj2();  //结果为2

8.条件语句

--if 语句

if (condition)
{
    当条件为 true 时执行的代码
}

 

 

--if...else 语句

if (condition)
{
    当条件为 true 时执行的代码
}
else
{
    当条件为 false 时执行的代码
}

 

 

--if...else if....else 语句

if (condition1)
{
    当条件 1 为 true 时执行的代码
}
else if (condition2)
{
    当条件 2 为 true 时执行的代码
}
else
{
  当条件 1 和 条件 2 都不为 true 时执行的代码
}

 

 

--false值

if语句在判断条件是如果是以下值,则判断为false;排除这些值之外,则判断为true。

0

-0

null

""

false

undefined

NaN==Not a Number

 

 --switch 语句

switch(n)

{

    case 1:

        执行代码块 1

        break;

    case 2:

        执行代码块 2

        break;

    default:

        与 case 1 和 case 2 不同时执行的代码

}

工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。

9.循环语句

--for循环

--for/in - 循环遍历对象的属性

上述代码中X指的是person的属性:name,sex,age,birthday。person[x]知道

--forEach循环

var arr = [1, 2, 3, 4];
var sum = 0;
for (var k = 0; k < arr.length; k++) {sum += arr[k]
}

上面的代码等价于:

var arr = [1,2,3,4];
var sum = 0;
arr.forEach(function(value,index,array){// array[index] == value;  三者关系sum+=value;
});
console.log(sum);    //结果为 10

forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第二个参数是对应的数组索引,第三个参数是数组本身

--while循环

while (i<5)
{x=x + "The number is " + i + "<br>";i++;
}

 

 

--Do/while循环 (不管条件符合不符合,都先执行一次)

do
{x=x + "The number is " + i + "<br>";i++;
}
while (i<5);

--break/continue

break 语句用于跳出循环-终止。

continue 用于跳过循环中的一个迭代-停一次。

10.JavaScript对象方法

 --JavaScript 数字对象

创建:new Number()

方法

描述

toString

把数字转换为字符串,使用指定的基数。

toLocaleString

把数字转换为字符串,使用本地数字格式顺序。

toFixed

把数字转换为字符串,结果的小数点后有指定位数的数字。

toExponential

把对象的值转换为指数计数法。

toPrecision

把数字格式化为指定的长度。

valueOf

返回一个 Number 对象的基本数字值。

 

 

常用方法

  • toFixed():约束小数点后几位数,结果返回一个字符串。例:浮点数字乘除法的bug,运行以下代码:
var i=134.23*12.5;
console.log(i.toFixed(2));

 --JavaScript 字符串对象

 

创建:字符串相当于字符的数组,它也有自己的下标,从0开始,也有自己的length。

属性:

属性

描述

constructor

对创建该对象的函数的引用

length

字符串的长度

prototype

允许您向对象添加属性和方法

全部方法:

方法

描述

anchor()

创建 HTML 锚。

big()

用大号字体显示字符串。

blink()

显示闪动字符串。

bold()

使用粗体显示字符串。

charAt()

返回在指定位置的字符。

charCodeAt()

返回在指定的位置的字符的 Unicode 编码。

concat()

连接字符串。

fixed()

以打字机文本显示字符串。

fontcolor()

使用指定的颜色来显示字符串。

fontsize()

使用指定的尺寸来显示字符串。

fromCharCode()

从字符编码创建一个字符串。

indexOf()

检索字符串,可返回某个指定的字符串值在字符串中首次出现的位置。

italics()

使用斜体显示字符串。

lastIndexOf()

从后向前搜索字符串。

link()

将字符串显示为链接。

localeCompare()

用本地特定的顺序来比较两个字符串。

match()

找到一个或多个正则表达式的匹配。

replace()

替换与正则表达式匹配的子串。

search()

检索与正则表达式相匹配的值。

slice()

提取字符串的片断,并在新的字符串中返回被提取的部分。

small()

使用小字号来显示字符串。

split()

把字符串分割为字符串数组。

strike()

使用删除线来显示字符串。

sub()

把字符串显示为下标。

substr()

从起始索引号提取字符串中指定数目的字符。

substring()

提取字符串中两个指定的索引号之间的字符。

sup()

把字符串显示为上标。

toLocaleLowerCase()

把字符串转换为小写。

toLocaleUpperCase()

把字符串转换为大写。

toLowerCase()

把字符串转换为小写。

toUpperCase()

把字符串转换为大写。

toSource()

代表对象的源代码。

toString()

返回字符串。

valueOf()

返回某个字符串对象的原始值。

 

常用方法:

  • 检索字符串:indexOf()
  • 替换字符串:replace()
  • 提取字符串片段:slice()/substr()
  • 切割字符串为数组split()

-- JavaScript 数组对象

属性:

属性

描述

constructor

返回对创建此对象的数组函数的引用。

length

设置或返回数组中元素的数目。

prototype

使您有能力向对象添加属性和方法。

全部方法:

 

方法

描述

concat()

连接两个或更多的数组,并返回结果。

join()

把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

pop()

删除并返回数组的最后一个元素

push()

向数组的末尾添加一个或更多元素,并返回新的长度。

reverse()

颠倒数组中元素的顺序。

shift()

删除并返回数组的第一个元素

slice()

从某个已有的数组返回选定的元素

sort()

对数组的元素进行排序

splice()

删除元素,并向数组添加新元素。

toSource()

返回该对象的源代码。

toString()

把数组转换为字符串,并返回结果。

toLocaleString()

把数组转换为本地数组,并返回结果。

unshift()

向数组的开头添加一个或更多元素,并返回新的长度。

valueOf()

返回数组对象的原始值

 

 

常用方法

  • 添加删除:下图

  • 数组转化为字符串:join()
  • 数组排序:
sort(function(a,b){
//升序
return a-b;
//降序
return b-a;
});

 --JavaScript Date对象

 

创建:获取当前时间:new Date()

设定某一个特定时间:new Date(year, month, day, hours, minutes, seconds, milliseconds)

全部方法:

方法

描述

getDate()

从 Date 对象返回一个月中的某一天 (1 ~ 31)。

getDay()

从 Date 对象返回一周中的某一天 (0 ~ 6)。

getFullYear()

从 Date 对象以四位数字返回年份。

getHours()

返回 Date 对象的小时 (0 ~ 23)。

getMilliseconds()

返回 Date 对象的毫秒(0 ~ 999)。

getMinutes()

返回 Date 对象的分钟 (0 ~ 59)。

getMonth()

从 Date 对象返回月份 (0 ~ 11)。

getSeconds()

返回 Date 对象的秒数 (0 ~ 59)。

getTime()

返回 1970 年 1 月 1 日至今的毫秒数。

getTimezoneOffset()

返回本地时间与格林威治标准时间 (GMT) 的分钟差。

getUTCDate()

根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。

getUTCDay()

根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。

getUTCFullYear()

根据世界时从 Date 对象返回四位数的年份。

getUTCHours()

根据世界时返回 Date 对象的小时 (0 ~ 23)。

getUTCMilliseconds()

根据世界时返回 Date 对象的毫秒(0 ~ 999)。

getUTCMinutes()

根据世界时返回 Date 对象的分钟 (0 ~ 59)。

getUTCMonth()

根据世界时从 Date 对象返回月份 (0 ~ 11)。

getUTCSeconds()

根据世界时返回 Date 对象的秒钟 (0 ~ 59)。

getYear()

已废弃。 请使用 getFullYear() 方法代替。

parse()

返回1970年1月1日午夜到指定日期(字符串)的毫秒数。

setDate()

设置 Date 对象中月的某一天 (1 ~ 31)。

setFullYear()

设置 Date 对象中的年份(四位数字)。

setHours()

设置 Date 对象中的小时 (0 ~ 23)。

setMilliseconds()

设置 Date 对象中的毫秒 (0 ~ 999)。

setMinutes()

设置 Date 对象中的分钟 (0 ~ 59)。

setMonth()

设置 Date 对象中月份 (0 ~ 11)。

setSeconds()

设置 Date 对象中的秒钟 (0 ~ 59)。

setTime()

setTime() 方法以毫秒设置 Date 对象。

setUTCDate()

根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。

setUTCFullYear()

根据世界时设置 Date 对象中的年份(四位数字)。

setUTCHours()

根据世界时设置 Date 对象中的小时 (0 ~ 23)。

setUTCMilliseconds()

根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。

setUTCMinutes()

根据世界时设置 Date 对象中的分钟 (0 ~ 59)。

setUTCMonth()

根据世界时设置 Date 对象中的月份 (0 ~ 11)。

setUTCSeconds()

setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。

setYear()

已废弃。请使用 setFullYear() 方法代替。

toDateString()

把 Date 对象的日期部分转换为字符串。

toGMTString()

已废弃。请使用 toUTCString() 方法代替。

toISOString()

使用 ISO 标准返回字符串的日期格式。

toJSON()

以 JSON 数据格式返回日期字符串。

toLocaleDateString()

根据本地时间格式,把 Date 对象的日期部分转换为字符串。

toLocaleTimeString()

根据本地时间格式,把 Date 对象的时间部分转换为字符串。

toLocaleString()

据本地时间格式,把 Date 对象转换为字符串。

toString()

把 Date 对象转换为字符串。

toTimeString()

把 Date 对象的时间部分转换为字符串。

toUTCString()

根据世界时,把 Date 对象转换为字符串。

UTC()

根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。

valueOf()

返回 Date 对象的原始值。

获取方法:getDate(),getMonth(),getFullYear(),getDay(),getHours(),getMinutes(),getSeconds()


设置方法:setDate(),setMonth(),setFullYear(),setDay(),setHours(),setMinutes(),setSeconds()

时间戳(毫秒数):

getTime()----从1970-01-01至今的毫秒数,

valueOf()----原始值

 

 --JavaScript Math对象

属性

属性

描述

E

返回算术常量 e,即自然对数的底数(约等于2.718)。

LN2

返回 2 的自然对数(约等于0.693)。

LN10

返回 10 的自然对数(约等于2.302)。

LOG2E

返回以 2 为底的 e 的对数(约等于 1.414)。

LOG10E

返回以 10 为底的 e 的对数(约等于0.434)。

PI

返回圆周率(约等于3.14159)。

SQRT1_2

返回返回 2 的平方根的倒数(约等于 0.707)。

SQRT2

返回 2 的平方根(约等于 1.414)。

全部方法:

 

方法

描述

abs(x)

返回 x 的绝对值。

acos(x)

返回 x 的反余弦值。

asin(x)

返回 x 的反正弦值。

atan(x)

以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。

atan2(y,x)

返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。

ceil(x)

对数进行上舍入。

cos(x)

返回数的余弦。

exp(x)

返回 Ex 的指数。

floor(x)

对 x 进行下舍入。

log(x)

返回数的自然对数(底为e)。

max(x,y,z,...,n)

返回 x,y,z,...,n 中的最高值。

min(x,y,z,...,n)

返回 x,y,z,...,n中的最低值。

pow(x,y)

返回 x 的 y 次幂。

random()

返回 0 ~ 1 之间的随机数。不包含1

round(x)

把数四舍五入为最接近的整数。

sin(x)

返回数的正弦。

sqrt(x)

返回数的平方根。

tan(x)

返回角的正切。

 

 

常用方法:

random():生成一个随机数,应用场景主要集中在随机事件中,例如刮刮乐,转盘抽奖、座号生成等随机事件,示例如下:

http://www.17sucai.com/preview/26528/2016-02-24/cj/index.html

-- JavaScript RegExp对象

正则表达式

国内手机号码:/^1((3|5|8){1}\d{1}|70)\d{8}$/

15/18位身份证号码:

var reg = /^[1-9]\d{7}((0\d)|(1[0-2]))([0|1|2]\d()|3[0-1])\d{3}$|

^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;

语法规则:

var patt=new RegExp(pattern,modifiers);

var patt=/pattern/modifiers;

当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \),示例如下:

var re = new RegExp("\\w+");

var re = /\w+/;

修饰符(modifiers):

修饰符

描述

i

执行对大小写不敏感的匹配。

g

执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

m

执行多行匹配。

方括号:用于查找某个范围内的字符: 

 

表达式

描述

[abc]

查找方括号之间的任何字符。

[^abc]

查找任何不在方括号之间的字符。

[0-9]

查找任何从 0 至 9 的数字。

[a-z]

查找任何从小写 a 到小写 z 的字符。

[A-Z]

查找任何从大写 A 到大写 Z 的字符。

[A-z]

查找任何从大写 A 到小写 z 的字符。

[adgk]

查找给定集合内的任何字符。

[^adgk]

查找给定集合外的任何字符。

(red|blue|green)

查找任何指定的选项。

元字符(Metacharacter)是拥有特殊含义的字符:

 

元字符

描述

.

查找单个字符,除了换行和行结束符。

\w

查找单词字符。

\W

查找非单词字符。

\d

查找数字。

\D

查找非数字字符。

\s

查找空白字符。

\S

查找非空白字符。

\b

匹配单词边界。

\B

匹配非单词边界。

\0

查找 NUL 字符。

\n

查找换行符。

\f

查找换页符。

\r

查找回车符。

\t

查找制表符。

\v

查找垂直制表符。

\xxx

查找以八进制数 xxx 规定的字符。

\xdd

查找以十六进制数 dd 规定的字符。

\uxxxx

查找以十六进制数 xxxx 规定的 Unicode 字符。

量词:

 

量词

描述

n+

匹配任何包含至少一个 n 的字符串。

n*

匹配任何包含零个或多个 n 的字符串。

n?

匹配任何包含零个或一个 n 的字符串。

n{X}

匹配包含 X 个 n 的序列的字符串。

n{X,Y}

匹配包含 X+1  Y+1 个 n 的序列的字符串。

n{X,}

匹配包含至少 X 个 n 的序列的字符串。

n$

匹配任何结尾为 n 的字符串。

^n

匹配任何开头为 n 的字符串。

?=n

匹配任何其后紧接指定字符串 n 的字符串。

?!n

匹配任何其后没有紧接指定字符串 n 的字符串。

属性:

 

属性

描述

FF

IE

global

RegExp 对象是否具有标志 g。

1

4

ignoreCase

RegExp 对象是否具有标志 i。

1

4

lastIndex

一个整数,标示开始下一次匹配的字符位置。

1

4

multiline

RegExp 对象是否具有标志 m。

1

4

source

正则表达式的源文本。

1

4

方法:

 

方法

描述

FF

IE

compile

编译正则表达式。

1

4

exec

检索字符串中指定的值。返回找到的值,并确定其位置。

1

4

test

检索字符串中指定的值。返回 true 或 false。

1

4

支持正则表达式的 String 对象的方法:

 

方法

描述

FF

IE

search

检索与正则表达式相匹配的值。

1

4

match

找到一个或多个正则表达式的匹配。

1

4

replace

替换与正则表达式匹配的子串。

1

4

split

把字符串分割为字符串数组。

1

4


11、JavaScript DOM

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM模型被构造为对象的树:DOM树

操作dom的过程:document——>查找元素——>element对象——>操作DOM

document对象的方法:

 

方法

描述

close()

关闭用 document.open() 方法打开的输出流,并显示选定的数据。

getElementById()

返回对拥有指定 id 的第一个对象的引用。

getElementsByName()

返回带有指定名称的对象集合。

getElementsByTagName()

返回带有指定标签名的对象集合。

open()

打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。

write()

向文档写 HTML 表达式 或 JavaScript 代码。

writeln()

等同于 write() 方法,不同的是在每个表达式之后写一个换行符。

element 的属性/方法:

属性 / 方法

描述

element.accessKey

设置或返回元素的快捷键。

element.appendChild()

向元素添加新的子节点,作为最后一个子节点。

element.attributes

返回元素属性的 NamedNodeMap。

element.childNodes

返回元素子节点的 NodeList。

element.className

设置或返回元素的 class 属性。

element.clientHeight

返回元素的可见高度。

element.clientWidth

返回元素的可见宽度。

element.cloneNode()

克隆元素。

element.compareDocumentPosition()

比较两个元素的文档位置。

element.contentEditable

设置或返回元素的文本方向。

element.dir

设置或返回元素的文本方向。

element.firstChild

返回元素的首个子。

element.getAttribute()

返回元素节点的指定属性值。

element.getAttributeNode()

返回指定的属性节点。

element.getElementsByTagName()

返回拥有指定标签名的所有子元素的集合。

element.getFeature()

返回实现了指定特性的 API 的某个对象。

element.getUserData()

返回关联元素上键的对象。

element.hasAttribute()

如果元素拥有指定属性,则返回true,否则返回 false。

element.hasAttributes()

如果元素拥有属性,则返回 true,否则返回 false。

element.hasChildNodes()

如果元素拥有子节点,则返回 true,否则 false。

element.id

设置或返回元素的 id。

element.innerHTML

设置或返回元素的内容。

element.insertBefore()

在指定的已有的子节点之前插入新节点。

element.isContentEditable

设置或返回元素的内容。

element.isDefaultNamespace()

如果指定的 namespaceURI 是默认的,则返回 true,否则返回 false。

element.isEqualNode()

检查两个元素是否相等。

element.isSameNode()

检查两个元素是否是相同的节点。

element.isSupported()

如果元素支持指定特性,则返回 true。

element.lang

设置或返回元素的语言代码。

element.lastChild

返回元素的最后一个子元素。

element.namespaceURI

返回元素的 namespace URI。

element.nextSibling

返回位于相同节点树层级的下一个节点。

element.nodeName

返回元素的名称。

element.nodeType

返回元素的节点类型。

element.nodeValue

设置或返回元素值。

element.normalize()

合并元素中相邻的文本节点,并移除空的文本节点。

element.offsetHeight

返回元素的高度。

element.offsetWidth

返回元素的宽度。

element.offsetLeft

返回元素的水平偏移位置。

element.offsetParent

返回元素的偏移容器。

element.offsetTop

返回元素的垂直偏移位置。

element.ownerDocument

返回元素的根元素(文档对象)。

element.parentNode

返回元素的父节点。

element.previousSibling

返回位于相同节点树层级的前一个元素。

element.removeAttribute()

从元素中移除指定属性。

element.removeAttributeNode()

移除指定的属性节点,并返回被移除的节点。

element.removeChild()

从元素中移除子节点。

element.replaceChild()

替换元素中的子节点。

element.scrollHeight

返回元素的整体高度。

element.scrollLeft

返回元素左边缘与视图之间的距离。

element.scrollTop

返回元素上边缘与视图之间的距离。

element.scrollWidth

返回元素的整体宽度。

element.setAttribute()

把指定属性设置或更改为指定值。

element.setAttributeNode()

设置或更改指定属性节点。

element.setIdAttribute()

 

element.setIdAttributeNode()

 

element.setUserData()

把对象关联到元素上的键。

element.style

设置或返回元素的 style 属性。

element.tabIndex

设置或返回元素的 tab 键控制次序。

element.tagName

返回元素的标签名。

element.textContent

设置或返回节点及其后代的文本内容。

element.title

设置或返回元素的 title 属性。

element.toString()

把元素转换为字符串。

nodelist.item()

返回 NodeList 中位于指定下标的节点。

nodelist.length

返回 NodeList 中的节点

--增删改查:

查找HTML元素(加粗的常用)

  • var x=document.getElementById("intro");(查找速度最快)
  • var x=document.getElementsByName("intro")[0];
  • var x=document.getElementsByTagName("input")[0];
  • var x=document.querySelectorAll(".result li a")[0]; IE>=8 //返回一个Nodelist节点集合,是一个element对象的假数组。
  • var x=document.querySelector(".result li a"); IE>=8      //返回是一个element对象               
  • var x=document.getElementsByClassName("talkBox")[0]; IE>=9

修改HTML元素

  • document.write()
  • element.innerHTML=”<span>hello,world</span>”

 

  • element.innerText=”hello,world”

修改样式

element.style.fontWeight=”bold”

样式名使用驼峰式写法,修改内链样式优先级高

  1. 创建元素标签:createElement()
  2. 修饰元素:setAttribute()/innerHTML()/……
  3. 插入元素:appendChild() / insertBefore(newItem,existItem)
  4. 删除HTML元素removeChild()

一个元素点击出现两个结果:

 

--DOM事件

全部事件:

属性

此事件发生在何时...

onabort

图像的加载被中断。

onblur

元素失去焦点。

onchange

域的内容被改变。

onclick

当用户点击某个对象时调用的事件句柄。

ondblclick

当用户双击某个对象时调用的事件句柄。

onerror

在加载文档或图像时发生错误。

onfocus

元素获得焦点。

onkeydown

某个键盘按键被按下。

onkeypress

某个键盘按键被按下并松开。

onkeyup

某个键盘按键被松开。

onload

一张页面或一幅图像完成加载。

onmousedown

鼠标按钮被按下。

onmousemove

鼠标被移动。

onmouseout

鼠标从某元素移开。

onmouseover

鼠标移到某元素之上。

onmouseup

鼠标按键被松开。

onreset

重置按钮被点击。

onresize

窗口或框架被重新调整大小。

onselect

文本被选中。

onsubmit

确认按钮被点击。

onunload

用户退出页面。

oninput

用户输入时候触发事件(IE>=9

鼠标 / 键盘属性:

属性

描述

altKey

返回当事件被触发时,"ALT" 是否被按下。

button

返回当事件被触发时,哪个鼠标按钮被点击。

clientX

返回当事件被触发时,鼠标指针的水平坐标。

clientY

返回当事件被触发时,鼠标指针的垂直坐标。

ctrlKey

返回当事件被触发时,"CTRL" 键是否被按下。

metaKey

返回当事件被触发时,"meta" 键是否被按下。

relatedTarget

返回与事件的目标节点相关的节点。

screenX

返回当某个事件被触发时,鼠标指针的水平坐标。

screenY

返回当某个事件被触发时,鼠标指针的垂直坐标。

shiftKey

返回当事件被触发时,"SHIFT" 键是否被按下。

keyCode

返回当事件被触发时,键盘按下那一个按键键码

标准 Event 属性:

属性

描述

bubbles

返回布尔值,指示事件是否是起泡事件类型。

cancelable

返回布尔值,指示事件是否可拥可取消的默认动作。

currentTarget

返回其事件监听器触发该事件的元素。

eventPhase

返回事件传播的当前阶段。

target

返回触发此事件的元素(事件的目标节点)。

timeStamp

返回事件生成的日期和时间。

type

返回当前 Event 对象表示的事件的名称。

标准 Event 方法:

方法

描述

initEvent()

初始化新创建的 Event 对象的属性。

preventDefault()

通知浏览器不要执行与事件关联的默认动作。阻止默认动作

stopPropagation()

不再派发事件阻止冒泡

事件使用形式:

<div onclick="getData()">我是谁?</div>
oBtn.onclick=function(){
alert(this.innerText);
}

事件模型:

监听事件/移除事件

 

 

 

  1. 保证兼容性,移除事件时,将事件赋值为null,例如:oBtn.οnmοusedοwn=null;
  2. 不考虑兼容性,IE>=9.0可以使用addEventListener绑定事件,addEventListener() 方法用于向指定元素添加事件句柄。

addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。你可以向一个元素添加多个事件句柄。你可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。

示例:

element.addEventListener("click", function(){

alert("Hello World!");

});

  1. removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

var oBox = document.getElementById("box");

var oDemo = document.getElementById("demo");

oBox.addEventListener("mousemove", moveHandle);

 

function moveHandle() {

    oDemo.innerHTML = “Hello World”;

}

//移除事件

oBox.removeEventListener("mousemove", moveHandle);

IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。对于这类浏览器版本可以使用 detachEvent() 方法来移除事件句柄:

element.attachEvent(event, function);
element.detachEvent(event, function);

JavaScript BOM

浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话"。浏览器对象模型BOM(Browser Object Model)尚无正式标准。由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因此常被认为是 BOM 的方法和属性。

window 对象

所有浏览器都支持 window 对象。它表示浏览器窗口。所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性。全局函数是 window 对象的方法。

Window 对象属性

属性

描述

closed

返回窗口是否已被关闭。

defaultStatus

设置或返回窗口状态栏中的默认文本。

document

对 Document 对象的只读引用。(请参阅对象)

frames

返回窗口中所有命名的框架。该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架。

history

对 History 对象的只读引用。请参数 History 对象

innerHeight

返回窗口的文档显示区的高度。

innerWidth

返回窗口的文档显示区的宽度。

length

设置或返回窗口中的框架数量。

location

用于窗口或框架的 Location 对象。请参阅 Location 对象

name

设置或返回窗口的名称。

navigator

对 Navigator 对象的只读引用。请参数 Navigator 对象

opener

返回对创建此窗口的窗口的引用。

outerHeight

返回窗口的外部高度,包含工具条与滚动条。

outerWidth

返回窗口的外部宽度,包含工具条与滚动条。

pageXOffset

设置或返回当前页面相对于窗口显示区左上角的 X 位置。

pageYOffset

设置或返回当前页面相对于窗口显示区左上角的 Y 位置。

parent

返回父窗口。

screen

对 Screen 对象的只读引用。请参数 Screen 对象

screenLeft

返回相对于屏幕窗口的x坐标

screenTop

返回相对于屏幕窗口的y坐标

screenX

返回相对于屏幕窗口的x坐标

screenY

返回相对于屏幕窗口的y坐标

self

返回对当前窗口的引用。等价于 Window 属性。

status

设置窗口状态栏的文本。

top

返回最顶层的父窗口。

Window 对象方法

方法

描述

alert()

显示带有一段消息和一个确认按钮的警告框。

blur()

把键盘焦点从顶层窗口移开。

clearInterval()

取消由 setInterval() 设置的 timeout。

clearTimeout()

取消由 setTimeout() 方法设置的 timeout。

close()

关闭浏览器窗口。

confirm()

显示带有一段消息以及确认按钮和取消按钮的对话框。

createPopup()

创建一个 pop-up 窗口。

focus()

把键盘焦点给予一个窗口。

moveBy()

可相对窗口的当前坐标把它移动指定的像素。

moveTo()

把窗口的左上角移动到一个指定的坐标。

open()

打开一个新的浏览器窗口或查找一个已命名的窗口。

print()

打印当前窗口的内容。

prompt()

显示可提示用户输入的对话框。

resizeBy()

按照指定的像素调整窗口的大小。

resizeTo()

把窗口的大小调整到指定的宽度和高度。

scroll()

 

scrollBy()

按照指定的像素值来滚动内容。

scrollTo()

把内容滚动到指定的坐标。

setInterval()

按照指定的周期(以毫秒计)来调用函数或计算表达式。

setTimeout()

在指定的毫秒数后调用函数或计算表达式。

location对象

 

 

属性

属性

描述

hash

返回一个URL的锚部分

host

返回一个URL的主机名和端口

hostname

返回URL的主机名

href

返回完整的URL

pathname

返回的URL路径名。

port

返回一个URL服务器使用的端口号

protocol

返回一个URL协议

search

返回一个URL的查询部分

方法

方法

说明

assign()

载入一个新的文档

reload()

重新载入当前文档 (F5刷新页面)

replace()

用新的文档替换当前文档

History 对象

方法

方法

描述

back()

加载 history 列表中的前一个 URL。

forward()

加载 history 列表中的下一个 URL。

go()

加载 history 列表中的某个具体页面。

 

navigator对象

属性

属性

描述

appCodeName

返回浏览器的代码名。

appMinorVersion

返回浏览器的次级版本。

appName

返回浏览器的名称。

appVersion

返回浏览器的平台和版本信息。

browserLanguage

返回当前浏览器的语言。

cookieEnabled

返回指明浏览器中是否启用 cookie 的布尔值。

cpuClass

返回浏览器系统的 CPU 等级。

onLine

返回指明系统是否处于脱机模式的布尔值。

platform

返回运行浏览器的操作系统平台。

systemLanguage

返回 OS 使用的默认语言。

userAgent

返回由客户机发送服务器的 user-agent 头部的值。

userLanguage

返回 OS 的自然语言设置。

 

弹窗

  1. alert()
  2. confirm()
  3. prompt()

prompt("sometext","defaultvalue")

 

定时事件

执行多次事件

setInterval()

clearInterval()

示例代码:

var myVar = setInterval(function(){

myTimer()

},1000);

 

function myTimer(){

 var d=new Date();

 var t=d.toLocaleTimeString();

 document.getElementById("demo").innerHTML=t;

}

 

function myStopFunction(){

 clearInterval(myVar);

}

执行一次事件

setTimeout()

clearTimeout(

Cookie应用

Cookie

Cookies 是一些页面与页面之间的共享数据, 存储于你电脑上的文本文件中。

 

 

创建/修改cookie(增/改)

document.cookie="username=John Doe";(会话状态)

document.cookie="username=John Doe; expires=Thu, 18 Dec 2018 12:00:00 GMT";

 

 

删除cookie(删)

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

查询cookie(查)

两个函数(set/get)

function setCookie(cname,cvalue,exdays)
{
   var d = new Date();
   d.setTime(d.getTime()+(exdays*24*60*60*1000));
   var expires = "expires="+d.toGMTString();
   document.cookie = cname + "=" + cvalue + "; " + expires;
}

function getCookie(cname)
{
   var name = cname + "=";
   var ca = document.cookie.split(';');
   for(var i=0; i<ca.length; i++) 
  {
     var c = ca[i].trim();
     var arrC = c.split("=");

 if(arrC[0] == cname) {

return arrC[1];

 }

}
   return "";
}

cookie插件

某些情况下为了快速使用cookie可以使用js插件帮助我们管理cookie的存取,例如:https://github.com/js-cookie/js-cookie

AJAX数据传输

Ajax

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

场景原理

同步与异步

 异步传输

当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success

 同步传输

当ajax发送请求后,在等待server端返回的这个过程中,前台页面里所有的代码停止,页面呈现假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。

使用方法

创建 XMLHttpRequest 对象

var ajax = new XMLHttpRequest()

发送请求

方法

描述

open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)

send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求

GET数据

open(“GET”,url,true);

send();

POST数据

open(“POST”,url,true);

send(data);

设置头部

setRequestHeader(header,value)

可发送的数据格式

ajax的数据格式有四种: 文本,json,HTML,和xml。现在普遍采用JSON数据格式发送数据

JSON

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

格式语法

JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

var obj = {a: 'Hello', b: 'World'}; 

//这是一个对象,注意键名也是可以使用引号包裹的

var json = '{"a": "Hello", "b": "World"}'; 

//这是一个 JSON 字符串,本质是一个字符串

JSON/JS对象互转

要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'});

 //结果是 '{"a": "Hello", "b": "World"}'

要实现从 JSON字符串 转换为对象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}');

 //结果是 {a: 'Hello', b: 'World'}

响应/回调函数

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState 属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

 

属性

描述

onreadystatechange

存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪

status

200: "OK"
404: 未找到页面

responseText

响应返回文本

responseXML

 

status状态

服务器常用的状态码及其对应的含义如下:

  •  200:服务器响应正常。
  •  304:该资源在上次请求之后没有任何修改(这通常用于浏览器的缓存机制,使用GET请求时尤其需要注意)。
  •  400:无法找到请求的资源。
  •  401:访问资源的权限不够。
  •  403:没有权限访问资源。
  •  404:需要访问的资源不存在。
  •  405:需要访问的资源被禁止。
  •  407:访问的资源需要代理身份验证。
  •  414:请求的URL太长。
  •  500:服务器内部错误。

GET/POST区别

参数:

  • GET传递的参数只能带URL后面,文本格式QueryString,各浏览器一般有长度限制,一般认为是2083,如果有中文字符更短。提交到服务器端的数据量小。
  • POST可以传递application/x-www-form-urlencoded的类似QueryString、multipart/form-data的二进制报文格式(支持文件信息嵌入报文传输)、纯文本或二进制的body参数。提交到服务器端的数据量大。参考:http://blog.csdn.net/kimmking/article/details/2051169

用途:

GET用于从服务器端获取数据,包括静态资源(HTML|JS|CSS|Image等等)、动态数据展示(列表数据、详情数据等等)。

POST用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等。

缓存:

GET时默认可以复用前面的请求数据作为缓存结果返回,此时以完整的URL作为缓存数据的KEY。所以有时候为了强制每次请求都是新数据,我们可以在URL后面加上一个随机参数Math.random或时间戳new Date().getTime()、或版本号,比如abc.com?a=1&rnd=0.123987之类的。这也是目前一些静态资源后面加一个很长的版本号的原因,jquery-min.js?v=13877770表示一个版本,当页面引用jquery-min.js?v=13877771时浏览器必然会重新去服务器请求这个资源。jQuery.ajax方法,如果cache=false,则会在GET请求参数中附加”_={timestamp}”来禁用缓存。

POST一般则不会被这些缓存因素影响。

安全性:

  • 默认对于nginx的access log,会自动记录get或post的完整URL,包括其中带的参数。
  • 对于POST来说,请求的报文却不会被记录,这些对于敏感数据来说,POST更安全一些。

自动化性能测试:

基于上面提到的nginx日志,可以使用grep GET+日期,awk格式化,然后sort -u去重,从而提取到某天的所有GET请求URL,使用程序模拟登陆,然后请求所有URL即可获取简单的性能测试数据,每个请求是否正确,响应时间多少等等。

但是对于POST请求,因为不知道报文,无法这样简单处理。可以通过nginx-lua获取报文输出到log,这样格式化会麻烦很多,但不失为一个办法。

面向对象编程

工厂模式

function createPerson(name, age, job) {

    var o = new Object();

    o.name = name;

    o.age = age;

    o.job = job;

    o.getName = function () {

        return this.name;

    }

    return o;//使用return返回生成的对象实例

}

var person1 = createPerson('Jack', 19, 'SoftWare Engineer');

创建对象交给一个工厂方法来实现,可以传递参数,但主要缺点是无法识别对象类型和来源,因为创建对象都是使用Object的原生构造函数来完成的。

构造函数模式

function Person(name,age,job){

    this.name = name;

    this.age = age;

    this.job = job;

    this.getName = function () {

        return this.name;

    }

}

var person1 = new Person('Jack', 19, 'SoftWare Engineer');

var person2 = new Person('Lilei', 23, 'Mechanical Engineer');

new方法实例对象

要创建Person的实例,必须使用new关键字,以Person函数为构造函数,传递参数完成对象创建;实际创建经过以下4个过程:

  1. 创建一个对象
  2. 将函数的作用域赋给新对象(因此this指向这个新对象,如:person1)
  3. 执行构造函数的代码
  4. 返回该对象
    1.  

Instanceof 方法

alert(person1 instanceof Person);//true;

alert(person2 instanceof Person);//true;

alert(person1 instanceof Object);//true;

alert(person1.constructor === person2.constructor);//true;

缺点

重复创建方法,浪费内存

 

原型模式

function Person(){

}

Person.prototype.name = 'Jack';//使用原型来添加属性

Person.prototype.age = 29;

Person.prototype.getName = function(){

return this.name;

}

var person1 = new Person();

alert(person1.getName());//Jack

var person2 = new Person();

alert(person1.getName === person2.getName);//true;共享一个原型对象的方法

原理

  1. JS每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,它是所有通过new操作符使用函数创建的实例的原型对象。原型对象最大特点是,所有对象实例共享它所包含的属性和方法,也就是说,所有在原型对象中创建的属性或方法都直接被所有对象实例共享。
  2. 原型模式创建的对象实例,其属性是共享原型对象的;但也可以自己实例中再进行定义,在查找时,就不从原型对象获取,而是根据搜索原则,得到本实例的返回;简单来说,就是实例中属性会屏蔽原型对象中的属性;
  3. 我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含有特定类型的所有实例共享的属性和方法。
  4. 只要创建了一个新函数,就会为该函数创建一个prototype属性。在默认情况下,所有prototype属性都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。这样,函数及函数原型之间形成了循环指向。
  5. 每当调用构造函数创建一个新实例后(即"new constructor()"这样的形式),该实例的内部将包含一个指针(一般名为__proto__),指向构造函数的原型属性。

缺点

function Person() {

}

Person.prototype.name = 'Jack';

Person.prototype.lessons = ['Math','Physics'];

var person1 = new Person();

person1.lessons.push('Biology');

var person2 = new Person();

alert(person2.lessons);

//Math,Physics,Biology,person1修改影响了person2

它省略了为构造函数传递初始化参数,这在一定程序带来不便;另外,最主要是当对象的属性是引用类型时,它的值是不变的,总是引用同一个外部对象,所有实例对该对象的操作都会其它实例

组合构造函数及原型模式

目前最为常用的定义类型方式,是组合构造函数模式与原型模式。构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方方法的引用,最大限度的节约内存。此外,组合模式还支持向构造函数传递参数,可谓是集两家之所长。

function Person(name, age, job) {

    this.name = name;

    this.age = age;

    this.job = job;

    this.lessons = ['Math', 'Physics'];

}

Person.prototype = {

    constructor: Person,//原型字面量方式会将对象的constructor变为Object,此外强制指回Person

    getName: function () {

        return this.name;

    }

}

var person1 = new Person('Jack', 19, 'SoftWare Engneer');

person1.lessons.push('Biology');

var person2 = new Person('Lily', 39, ` `'Mechanical Engneer');

alert(person1.lessons);//Math,Physics,Biology

alert(person2.lessons);//Math,Physics

alert(person1.getName === person2.getName);//true,//共享原型中定义方法

jQuery类型的封装就是使用组合模式来实例的!

  1. 思途心得

javascript总共分为三部分:ECMAScript、DOM、BOM。重点掌握DOM操作、事件绑定、定时器、AJAX等知识。

ECMAScript这一部分,零散的东西特别多,基础的对象、数组操作必须掌握,循环、if语句必须掌握,各种对象方法只需要掌握常用方法、正则表达式要求能够按照语法修改,先看懂会修改即可。

DOM部分,分为DOM增删改查、事件绑定/移除、事件对象三个部分。结合留言板示例,完成发表评论、删除评论等功能即可完全掌握,另外,事件委托在删除评论的时候必定要使用才能修正bug。事件对象需要结合拖放事件、键盘鼠标事件来理解其应用。

BOM部分重点掌握location对象、history对象、定时器、cookie、ajax发送。这一部分零散知识较多,但应用场景较少,要求同学先记好笔记代码,以后在使用这部分知识的时候,再回顾、参考,就能够更好的理解,像cookie、ajax在后面node.js部分会重新讲解。

面向对象编程对于初学者较难掌握,面向对象解决了代码重复利用的问题,要求同学先结合配图,理解构造函数模式、原型模式以及原型链,再模仿面向对象编程写法,修改自己的编程习惯,将之前写好的选项卡/轮播图修改成面向对象的方式。

  1. 作业
  1. 根据学校班级学生信息,计算出学校男生数、女生数分别是多少人,将结果储存在对象school中,并console.log(school)出结果!
  2. 根据某员工的社保缴费信息,计算出该员工每月个人缴费多少钱。
  3. 加油站搞活动,92#汽油,价格为6元一升,如果加20L以上,价格为5元一升;97#汽油,价格为7元一升,如果加30L以上,价格为5.5一升,编写程序,根据用户输入的汽油型号和数量,输出汽油总价
  4. 计算公元1年至今的闰年有哪些,总数是多少个?
  5. let arr = [1,2,3,4,5,65,2,3,3,3,3,4,4,4,4,5,5,5,23,2,2,3,4......] 去重后长度大于10,求出现频率最高的十个数字
  6. 有如下函数:

   sum(2,3)   //结果是5

   sum(2)(3)  //结果是5

请写出sum函数的具体怎么实现

  1. 编写一个带return的function,将字符串str中?后面的"键值对"转化成obj对象,并return出来!
  2. 数组 arr=[1,2,65,34,12,2,53,1,34,52,65,23]

1、编写一个函数,去除重复的数字,输出去重之后的数组

2、将输出的数组按照从小到大的顺序排序

  1. 霍金预言,2215年地球将面临灾难性毁灭。计算距离霍金预言末日,还剩余多少天,多少小时,多少分钟,多少秒,格式是12天5时43分24秒,将结果console.log出来!
  2. 座位号码随机抽取程序,可以输入最大座号,每次点击随机产生一个座号
  3. 在for循环里生成10个button,并绑定click事件,点击button分别弹出1~10(数字代表每一个button的序号)
  4. 参考以下代码,页面加载后,将提供的空气质量数据数组,按照某种逻辑(比如空气质量大于60)进行过滤筛选,最后将符合条件的数据按照一定的格式要求显示在网页上
  5. 一个游戏,前20关是每一关自身的分数,

// 21-30关每一关是10分

// 31-40关,每一关是20分

// 41-49关,每一关是30分

// 50关,是100分

输入你现在闯到的关卡数,求你现在拥有的分数

  1. 原生js编写一套选项卡,当前页状态要突出显示。参考网址:http://amazeui.org/javascript/tabs
  2. 在index.html页面里面js创建一个登录按钮,点击按钮,弹出黑色遮罩和登陆框。
  3. 原生js模拟队列操作增加/删除,排序
  4. 随机在整个页面x轴方向,产生随机样式,随即大小的雪花,并随机速度飘落。
  5. 原生js完成一套轮播图,要求固定宽度1200px、自动轮播、循环轮播、轮播效果渐隐。
  6. 百度首页—更多产品,鼠标悬停效果
  7. 原生js模拟时钟,实现时分秒显示、闹钟
  8. 原生js模拟实现简易计算器,实现一个运算符运算。
  9. 修改轮播图js程序,采用面向对象编程,一个页面上同时运行多个轮播图。