JS知识点总结

JS知识点总结


2024年7月4日发(作者:)

JS知识点总结

一、对象

1、JS的本地对象和内置对象

Array

创建Array对象的语法:

newArray();

newArray(size);

newArray(element0,element1,element2,...elementn);

属性:

constructor

length属性可设置或返回数组中元素的数目

;

prototype

方法:

concat();方法用于连接两个或多个数组

(arrayX,arrayX,...,arrayX);

join();方法用于把数组中的所有元素放入一个字符串。

(separator);

pop();方法用于删除并返回数组的最后一个元素

();

push();方法可向数组的末尾添加一个或多个元素,并返回新的长

(newelement1,newelement2,...,newelementn)

;

reverse();方法用于颠倒数组中元素的顺序

e();

shift();方法用于把数组的第一个元素从其中删除,并返回第一个

元素的值

();

slice();方法可从已有的数组中返回选定的元素

(start,end);

sort();方法用于对数组的元素进行排序

(sortby);

sortby规定排序顺序,必须是函数

splice();方法向/从数组中添加/删除项目,然后返回被删除的项目

(index,howmany,item1,...,itemX);

toSource();

toString();

toLocaleString();将数组转为本地字符串

leString();

unshift();方法可向数组的开头添加一个或更多元素,并返回新的

长度

t(newelement1,...newelementn);

valueOf();

Boolean

创建Boolean对象的语法:

newBoolean(value);

Boolean(value);

属性:

Constructor属性返回对创建此对象的Boolean函数的引用

uctor

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

=value;

方法:

toSource();方法返回表示对象源代码的字符串

ce();

toString();方法可把一个逻辑值转为字符串,并返回结果

ng();

valueOf();方法返回Boolean对象的原始值

f();

Date

创建Date对象的语法

varmydate=newDate();

属性:

constructor

prototype

方法:

Date();方法可返回当天的日期和时间

getDate();方法可返回月份的某一天

getDay();方法可返回表述星期的某一天的数字

getMonth();方法可返回表示月份的数字

getFullYear();方法可返回一个表示年份的4位数字

getYear();方法可返回表示年份的两位或四位数字,使用上面的方

法替代

getHours();方法返回时间的小时字段

getMinutes();方法返回时间的分钟字段

getSeconds();方法返回时间的秒

getMilliseconds();方法返回时间的毫秒

getTime();方法可返回距1970年1月1日之间的毫秒数

getTimezoneOffset();方法可返回格林威治时间和本地时间之间的

时差,以分钟为单位

getUTCDate();

getUTCDay();

getUTCMonth();

getUTCFullYear();

getUTCHours();

getUTCMinutes();

getUTCSeconds();

getUTCMilliseconds();

parse();方法可解析一个日期时间字符,并返回1970/1/1午夜距

离该日期时间的毫秒数

setDate();

setMonth();

setFullYear();

setYear();

setHours();

setMinutes();

setSeconds();

setMilliseconds();

setTime();

setUTCDate();

setUTCMonth();

setUTCFullYear();

setUTCHours();

setUTCMinutes();

setUTCSeconds();

setUTCMilliseconds();

toSource();

toString();

toTimeString();方法可把Date对象的时间部分转换为字符串,并

返回结果

toDateString();方法可把Date对象的日期部分转换为字符串,并

返回结果

toGMTString();

toUTCString();

toLocaleString();

toLocaleTimeString();

toLocaleDateString();

UTC();方法可根据世界时返回1970/1/1到指定日期的毫秒数

(year,month,day,hours,minutes,seconds,ms);

valueOf();

Math

Math对象用于执行数学任务

使用Math的属性和方法的语法:

varpi_value=;

varsqrt_value=(15);

属性:

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

LN2:返回2的自然对数

LN10:返回10的自然对数

LOG2E:返回以2为底的e的对数

LOG10E:返回以10为底的e的对数

PI:返回圆周率

SQRT1_2:返回2的平方根的倒数

SQRT2:返回2的平方根

方法:

abs(x);返回数的绝对值

acos(x);返回数的反余弦值

asin(x);返回数的反正弦值

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

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

ceil(x);对数进行上舍入

cos(x);返回数的余弦

exp(x);返回e的指数

floor(x);对数进行下舍入

log(x);返回数的自然对数(底为e)

max(x,y);返回x和y中的最大值

min(x,y);返回x和y中的最小值

pow(x,y);返回x的y次幂

random();返回0~1之间的随机数

round(x);把数四舍五入为最接近的整数

sin(x);返回数的正弦

sqrt(x);返回数的平方根

tan(x);返回角的正切

toSource();返回该对象的源代码

valueOf();返回Math对象的原始值

Number

创建Number对象的语法

varmynum=newNumber(value);

varmynum=Number(value);

属性:

constructor:返回对创建此对象的Number函数的应用

MAX_VALUE:可表示的最大数

MIN_VALUE:可表示的最小数

NaN:非数字值

NEGATIVE_INFINITY:负无穷大,溢出时返回该值

POSITIVE_INFINITY:正无穷大,溢出时返回该值

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

方法:

toString();

toLocaleString();

toFixed();方法可把Number四舍五入为指定小数位数的数字

toExponential();方法把对象的值转换成指数计数法

toPrecision();方法可在对象的值超出指定位数时将其转换为指数

计数法

valueOf();

String

String对象用于处理文本(字符串)

创建String对象的语法:

newString(s);

String(s);

属性:

constructor

length:字符串的长度

prototype

方法:

anchor();方法用于创建HTML锚

(anchorname);

big();方法用于把字符串显示为大号字体

blink();方法用于显示闪动的字符串

bold();方法用于把字符串显示为粗体

charAt();方法可返回指定位置的字符

(index);

charCodeAt();方法可返回指定位置的字符的Unicode编码

concat();方法用于连接两个或多个字符串

fixed();方法用于把字符串显示为打字机字体

fontcolor();方法用于按照指定的颜色来显示字符串

fontsize();方法用于按照指定的尺寸来显示字符串

fromCharCode();可接受一个或多个指定的Unicode值,然后返回

一个字符串

indexOf();方法可返回某个指定的字符串值在字符串中首次出现

的位置

italics();使用斜体字显示字符串

lastIndexOf();从后向前搜索字符串

link();将字符串显示为链接

localeCompare();用本地特定的顺序来比较两个字符串

match();找到一个或多个正则表达式的匹配

replace();替换与正则表达式匹配的子串

search();检索与正则表达式相匹配的值

slice();提取字符串的片段,并在新的字符串中返回被提取的部分

small();使用小字号来显示字符串

split();把字符串分割为字符数组

strike();使用删除线来显示字符串

sub();把字符串显示为下标

substr();从起始索引号提取字符串中指定数目的字符

substring();提取字符串中两个指定的索引号之间的字符

sup();把字符串显示为上标

toLocaleLowerCase();把字符串转换为小写

toLocaleUpperCase();把字符串转换为大写

toLowerCase();

toUpperCase();

toSource();

toString();

valueOf();

RegExp

RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工

直接量语法

/pattern/attributes

创建RegExp对象的语法:

newRegExp(pattern,attributes);

修饰符

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]:查找任何指定的选项

元字符

元字符是拥有特殊含义的字符

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

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至y个n的序列的字符串

n{x,}:匹配包含至少x个n的序列的字符串

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

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

?=n:匹配任何其后紧接指定字符串n的字符串

?!n:匹配任何气候没有紧接指定字符串n的字符串

属性:

global:RegExp对象是否具有标志g

ignoreCase:RegExp对象是否具有标志i

lastIndex:一个整数,标识开始下一次匹配的字符位置

multiline:RegExp对象是否具有标志m

source:正则表达式的源文本

方法:

compile:编译正则表达式

exec:方法用于检索字符串中的正则表达式的匹配

test:方法用于检测一个字符串是否匹配某个模式

Global

全局属性和函数可用于所有内建的JavaScript对象

顶层函数(全局函数)

decodeURI();解码某个编码的URI

decodeURIComponent();解码一个编码的URI组件

encodeURI();把字符串编码为URI

encodeURIComponent();把字符串编码为URI组件

escape();对字符串进行编码

eval();计算JavaScript字符串,并把它作为脚本代码来执行

getClass();返回一个JavaObject的JavaClass

isFinite();检查某个值是否为有穷大的数

isNaN();检查某个值是否是数字

Number();把对象的值转换为数字

parseFloat();解析一个字符串并返回浮点数

parseInt();解析一个字符串并返回一个整数

String();把对象的值转换为字符串

Unescape();对由escape()编码的字符串进行解码

顶层属性(全局属性)

Infinity:代表正的无穷大的数值

java:代表java.*包层级的一个JavaPackage

NaN:指示某个值是不是数字

Packages:根JavaPackage对象

undefined:指示未定义的值

Events

事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数

执行

事件句柄

onabort:图像加载被中断

onblur:元素失去焦点

onchange:用户改变域的内容

onclick:鼠标点击某个对象

ondblclick:鼠标双击某个对象

onerror:当加载文档或图像时发生某个错误

onfocus:元素获得焦点

onkeydown:某个键盘的键被按下

onkeypress:某个键盘的键被按下或按住

onkeyup:某个键盘的键被松开

onload:某个页面或图像被完成加载

onmousedown:某个鼠标按键被按下

onmousemove:鼠标被移动

onmouseout:鼠标从某元素移开

onmouseover:鼠标被移到某个元素之上

onmouseup:某个鼠标按键被松开

onreset:重置按钮被点击

onresize:窗口或框架被调整尺寸

onselect:文本被选定

onsubmit:提交按钮被点击

onunload:用户退出页面

2、Brower对象(BOM)

Window

Window对象表示浏览器中打开的窗口

如果文档中包含框架(frame或iframe标签),浏览器会为HTML文

档创建一个window对象,并为每个框架创建一个额外的window对象

Window对象集合

Frames[]:返回窗口中所有命名的框架。

属性:

closed:返回窗口是否已被关闭

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

document:对Document对象的只读引用

history:对History对象的只读引用

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

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

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

location:用于窗口或框架的Location对象

name:设置或返回窗口的名称

Navigator:对Navigator对象的只读引用

opener:返回对创建此窗口的窗口的引用

outerheight:返回窗口的外部高度

outerwidth:返回窗口的外部宽度

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

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

parent:返回父窗口

Screen:返回Screen对象的只读引用

self:返回对当前窗口的引用

status:设置窗口状态栏的文本

top:返回最顶层的先辈窗口

window:window属性等价于self属性,它包含了对窗口自身的引用

screenLeft:

screenTop:只读整数。声明了窗口的左上角在屏幕上的x坐标和y坐

screenX:

screenY:

方法:

alert();显示带有一段消息和一个确认按钮的警告框

blur();把键盘焦点从顶层窗口移开

clearInterval();取消由setInterval()设置的timeout

clearTimeout();取消由setTimeout()设置的timeout

close();关闭浏览器窗口

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

createPopup();创建一个pop-up窗口

focus();把键盘焦点给予一个窗口

moveBy();可相对于窗口的当前坐标把它移动指定的像素

moveTo();把窗口的左上角移动到一个个指定的坐标

open();打开一个新的浏览器窗口或查找一个已命名的窗口

print();打印当前窗口的内容

prompt();显示可提示用户输入的对话框

resizeBy();按照指定的像素调整窗口的大小

resizeTo();把窗口的大小调整到指定的宽度和高度

scrollBy();按照指定的像素值来滚动内容

scrollTo();把内容滚动到指定的坐标

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

setTimeout();在指定的毫秒后调用函数或计算表达式

Navigator

Nagivator对象包含有关浏览器的信息

Navigator对象集合

plugins[]:返回对文档中所有嵌入式对象的引用

该集合是一个Plugin对象的数组,其中的元素代表浏览器已

经安装的插件

属性:

appCodeName:返回浏览器的代码名

appMinorVersion:返回浏览器的次级版本

appName:返回浏览器的名称

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

browserLanguage:返回当前浏览器的语言

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

cpuClass:返回浏览器系统的cpu等级

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

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

systemLanguage:返回OS使用的默认语言

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

userLanguage:返回OS的自然语言设置

方法:

javaEnabled();规定浏览器是否启用java

taintEnabled();规定浏览器是否启用数据污点(datatainting)

Screen

Screen对象包含有关客户端显示屏幕的信息

属性:

availHeight:返回显示屏幕的高度(除windows任务栏之外)

availWidth:返回显示屏幕的宽度(除windows任务栏之外)

bufferDepth:设置或返回调色板的比特深度

colorDepth:返回目标设备或缓冲器上的调色板的比特深度

deviceXDPI:返回显示屏幕的每英寸水平点数

deviceYDPI:返回显示屏幕的每英寸垂直点数

fontSmoothingEnabled:返回用户是否在显示控制面板中启用了字

体平滑

height:返回显示屏幕的高度

logicalXDPI:返回显示屏幕每英寸的水平方向的常规点数

logicalYDPI:返回显示屏幕每英寸的垂直方向的常规点数

pixelDepth:返回显示屏幕的颜色分辨率(比特每像素)

updateInterval:设置或返回屏幕的刷新率

width:返回显示屏幕的宽度

History

History对象包含用户(在浏览器窗口中)访问过的URL

History对象是Window对象的一部分,可通过y属性对

其进行访问

属性:

length:返回浏览器历史列表中的URL数量

方法:

back();加载history列表中的前一个URL

forward();加载history列表中的下一个URL

go();加载history列表中的某个具体页面

Location

Location对象包含有关当前URL的信息

Location对象是Window对象的一个部分,可通过on

属性来访问

属性:

hash:设置或返回从#号开始的URL锚

host:设置或返回主机名和当前URL的端口号

hostname:设置或返回当前URL的主机名

href:设置或返回完整的URL

pathname:设置或返回当前URL的路径部分

port:设置或返回当前URL的端口号

protocol:设置或返回当前URL的协议

search:设置或返回从?开始的URL(查询部分)

方法:

assign();加载新的文档

reload();重新加载当前文档

replace();用心的文档替换当前文档

3、HTML对象(DOM)

Document

每个载入浏览器的HTML文档都会成为Document对象

Document对象使我们可以从脚本中对HTML页面中的所有元素进行

访问

Document对象集合

all[]:提供对文档中所有HTML元素的访问

anchor[]:返回对文档中所有Anchor对象的引用

applets[]:返回对文档中所有Applet对象的引用

forms[]:返回对文档中所有Form对象的引用

images[]:返回对文档中所有Image对象的引用

links[]:返回对文档中所有Area和Link对象的引用

属性:

body:提供对元素的直接访问

cookie:设置或返回与当前文档有关的所有cookie

domain:返回当前文档的域名

lastModified:返回文档被最后修改的日期和时间

referrer:返回载入当前文档的文档的URL

title:返回当前文档的标题

URL:返回当前文档的URL

方法:

close();关闭用()方法打开的输出流,并显示选定

的数据

getElementById();返回对拥有指定id的第一个对象的引用

getElementsByName();返回带有指定名称的对象的集合

getElementsByTagName();返回带有指定标签的对象的集合

open();打开一个流,以收集来自任何()或

n()方法的输出

write();向文档写HTML表达式或JavaScript代码

writeIn();等同于write()方法,不同的是在每个表达式之后写一个

换行符

Element

在HTMLDOM中,每个部分都是节点:

文档本身是文档节点

所有HTML元素是元素节点

所有HTML属性是属性节点

HTML元素内的文本是文本节点

注释是注释节点

Element对象

在HTMLDOM中,Element对象表示HTML元素

Element对象可以拥有类型为元素节点、文本节点、注释节点的

子节点

NodeList对象表示节点列表

元素也可以拥有属性,属性是属性节点

属性:

accessKey:设置或返回元素的快捷键

attributes:返回元素属性的NamedNodeMap

childNodes:返回元素子节点的NodeList

className:设置或返回元素的class属性

clientHeight:返回元素的可见高度

clientWidth:返回元素的可见宽度

contentEditable:设置或返回元素的内容是否可编辑

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

firstChild:返回元素的首个子元素

id:设置或返回元素的id

innerHTML:设置或返回元素的内容

isContentEditable:判断元素的内容是否可编辑

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

lastChild:返回元素的最后一个子元素

namespaceURI:返回元素的namespaceURI

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

nodeName:返回元素的名称

nodeType:返回元素的节点类型

nodeValue:设置或返回元素的值

offsetHeight:返回元素的高度

offsetWidth:返回元素的宽度

offsetLeft:返回元素的水平偏移位置

offsetParent:返回元素的偏移容器

offsetTop:返回元素的垂直偏移位置

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

parentNode:返回元素的父节点

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

scrollHeight:返回元素的整体高度

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

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

scrollWidth:返回元素的整体宽度

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

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

tagName:返回元素的标签名

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

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

length:返回NodeList中的节点数

方法:

appendChild();向元素添加新的子节点,作为最后一个子节点

cloneNode();克隆元素

compareDocumentPosition();比较两个元素的文档位置

getAttribute();返回元素节点的指定属性

getAttributeNode();返回指定的属性节点

getElementsByTagName();返回拥有指定标签名的所有子元素的

结合

getFeature();返回实现了指定特性的API的某个对象

getUserData();返回关联元素上键的对象

hasAttribute();如果元素拥有指定属性,则返回true,否则返回

false

hasAttributes();如果元素拥有属性,返回true,否则返回false

hasChildNodes();如果元素拥有子节点,返回true,否则返回false

insertBefore();在指定的已有的子节点之前插入新节点

isDefaultNamespace();如果指定的namespaceURI是默认的,返回

true,否则返回false

isEqualNode();检查两个元素是否相等

isSameNode();检查两个元素是否是相同的节点

isSupported();如果元素支持指定特性,返回true

normalize();合并元素中相邻的文本节点,并移除空的文本节点

removeAttribute();从元素中移除指定属性

removeAttributeNode();移除指定的属性节点,并返回被移除的节

removeChild();从元素中移除子节点

replaceChild();替换元素中的子节点

setAttribute();把指定属性设置或更改为指定值

setAttributeNode();设置或更改指定属性节点

setIdAttribute();

setIdAttributeNode();

setUserData();把对象关联到元素上的键

toString();把元素转换为字符串

item();返回NodeList中位于指定下标的节点

Attribute

Attr对象

在HTMLDOM中,Attr对象表示HTML属性

HTML属性始终属于HTML元素

NamedNodeMap对象

在HTMLDOM中,NamedNodeMap对象表示元素属性节点的无

序集合。

NamedNodeMap中的节点可通过名称或索引来访问

属性:

isId:如果属性是id类型,返回true,否则返回false

name:返回属性的名称

value:设置或返回属性的值

specofied:如果已指定属性,返回true,否则返回false

length:返回NamedNodeMap中的节点数

方法:

getNamedItem();从NamedNodeMap返回指定的属性节点

item();返回NamedNodeMap中位于指定下标的节点

removeNamedItem();移除指定的属性节点

setNamedItem();设置指定的属性节点

Event

Event对象代表事件的状态,比如事件在其中发生的元素、键盘按键

的状态、鼠标的位置、鼠标按钮的状态。

事件通常与函数结合使用,函数不会在事件发生前被执行。

事件句柄:

同javascript事件句柄

鼠标/键盘属性

altKey:返回当事件被触发时,“ALT”是否被按下

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

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

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

ctrlKey:返回当事件被触发时,“CTRL”键是否被按下

metaKey:返回当事件被触发时,“meta”键是否被按下

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

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

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

shiftKey:返回当事件被触发时,“SHIFT”键是否被按下

JavaScript实现

JavaScript的核心ECMAScript描述了该语言的语法和基本对象

DOM描述了处理网页内容的方法和接口

BOM描述了与浏览器进行交互的方法和接口

ECMAScript语法

区分大小写

变量是弱类型的

每行结尾的分号可有可无

注释与Java、C和PHP语言的注释相同

括号表示代码块

ECMAScript变量

使用var运算符声明变量

变量命需要遵守一些简单的规则

ECMAScript关键字

ECMAScript保留字

ECMAScript值

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

原始值

存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的

位置

引用值

存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存

储对象的内存处

ECMAScript原始类型:

Undefined,Null,Boolean,Number,String

ECMAScript引用类型

ECMAScript中的所有对象都由Object对象继承而来,Object对象中的所

有属性和方法都会出现在其他对象中。

Object对象具有下列属性

constructor

对创建对象的函数的引用。对于Object对象,该指针指向原始

的Object()函数

Prototype

对该对象的对象原型的引用。对于所有的对象,它默认返回

Object对象的一个实例

Object对象还具有几个方法:

hasOwnProperty(property);

判断对象是否有某个特定的属性。必须用字符串指定该属性。

IsPrototypeOf(object);

判断该对象是否为另一个对象的原型

PropertyIsEnumerable

判断给定的属性是否可以用in语句进行枚举

ToString();

返回对象的原始字符串表示。对于Object对象,ECMA-262没有

定义这个值,所以不同的ECMAScript实现具有不同的值

ValueOf();

返回最适合该对象的原始值。对于许多对象,该方法返回的值都

与ToString()的返回值相同

ECMAScript函数

函数是ECMAScript的核心

函数是由这样的方式进行声明的:关键字function、函数名、一组参数、以

及置于括号中的待执行代码。

函数的基本语法:

functionfunctionName(arg0,arg1,...argn){

statements

}

函数调用

函数可以通过其名字上加上括号中的参数进行调用,如果有多个参数

函数返回值

函数有返回值,也不用明确的声明它。

函数只需要使用return运算符后跟返回的值即可

ECMAScriptarguments对象

在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,就

能访问它们。

用arguments[0]访问参数的第一个值

返回参数的个数

ECMAScriptFunction对象(类)

ECMAScript的函数实际上是功能完整的对象

Function对象(类)

Function类可以表示开发者定义任何函数

用Function类直接创建函数的语法如下:

varfunction_name=newfunction(arg1,arg2,...argn,function_body);

在上面的形式中,每个arg都是一个参数,最后一个参数是函数主体(要执行

的代码),这些参数必须是字符串。

ECMAScript闭包(closure)

闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使

用函数之外定义的变量。

ECMAScript面向对象

在ECMAScript中,对象由特性构成,特性可以是原始值,也可以是引用值。

如果特性存放的是函数,它将被看作对象的方法,否则该特性被看作对象的属性

ECMAScript对象应用

对象的创建和销毁都在JavaScript执行过程中发生,理解这种范式的含义对

理解整个语言至关重要

声明和实例化

对象的创建方式是用关键字new后面跟上实例化的类的名字

varoObject=newObject();

对象的引用

在ECMAScript中,不能访问对象的物理表示,只能访问对象的引用。每

次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。

对象废除

把对象的所有引用都设置为null,可以强制性的废除对象

早绑定和晚绑定

所谓绑定,即把对象的接口与对象实例结合在一起的方法

早绑定是指在实例化对象之前定义它的属性和方法,这样编译器或解释

程序就能够提前转换机器代码。在Java中,有了早绑定,就可以在开发环境

中使用IntelliSense。

ECMAScript不是强类型语言,所以不支持早绑定

另一方面,晚绑定指的是编译器或解释程序在运行前,不知道对象的类

型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法

即可。

ECMAScript中的所有变量都采用晚绑定的方法。这样就允许执行大量的

对象操作,而无任何惩罚

ECMAScript对象类型

在ECMAScript中,所有对象并非同等创建的

一般来说,可以创建并使用的对象有三种:本地对象、内置对象和宿主对象

本地对象

独立于宿主环境的ECMAScript实现提供的对象

简单来说,本地对象就是ECMA-262定义的类。

包括:

Object

Function

Array

String

Boolean

Number

Date

RegExp

Error

EvalError

RangeError

ReferenceError

SyntaxError

TypeError

URIError

内置对象

由ECMAScript实现提供的、独立于宿主环境的所有对象,在

ECMAScript程序开始执行时出现。

开发者不必明确实例化内置对象,它已被实例化了。

ECMA-262只定义了两个内置对象:

Global

Math

宿主对象

所有非本地对象都是宿主对象,即由ECMAScript实现的宿主环境提

供的对象

所有BOM和DOM对象都是宿主对象

ECMAScript对象作用域

作用域指的是变量的适用范围

公用、私有和受保护作用域

ECMAScript只有公用作用域

this关键字

ECMAScript定义类或对象

使用预定义对象只是面向对象语言能力的一部分,它真正强大之处在于能够

创建自己专用的类和对象

ECMAScript拥有很多创建对象或类的方法。

工厂方式

原始的方式

因为对象的属性可以在对象创建后动态定义

varobj=newObject();

="hello";

=28;

=function(){

alert(+);

};

在上面的代码中,创建对象obj,然后给它设置几个属性,最后一个属性实际

上是指向函数的指针,意味着该属性是个方法。执行这段代码后,就可以使用对象

obj

这里有一个问题,就是可能需要创建多个obj的实例。

解决方案:工厂方式

要解决该问题,开发者创造了能创建并返回特定类型的对象的工厂函数。

如:

functioncreateCar(){

varcar=newObject();

="blue";

="ss";

=30;

=function(){

alert(++);

};

returncar;

}

varcar1=createCar();

varcar2=createCar();

在这里所有的代码都包含在createCar()函数中。并返回car最为函数值。

调用此函数将创建新对象,并赋予它所有必要的属性,复制出一个对象。

因此通过这种方法,我们很容易创建car对象的两个版本,它们的属性完全一样。

为函数传递参数

我们还可以修改函数的参数,给每个属性传递默认值,而不是简单的赋予属性

默认值。

functioncreateCar(icolor,imodel,iweight){

varcar=newObject();

=icolor;

=imodel;

=iweight;

=function(){

alert(++);

};

returncar;

}

varcar1=createCar("green","hh",30);

varcar2=createCar("red","gg",40);

();

();

上面的对象具有相同的属性,却又不同的属性值

在工厂函数外定义对象的方法

上面的创建对象,每次创建对象都要创建新的函数start(),意味着每个对象

都有自己的start()版本。而事实上,每个对象都共享同一个函数。

有些开发者在工厂函数外定义对象的方法,然后通过属性指向该方法,从而避

免这个问题:

functionstart(){

alert(++);

}

functioncreateCar(icolor,imodel,iweight){

varcar=newObject();

=icolor;

=imodel;

=iweight;

=start;

returncar;

}

varcar1=createCar("green","hh",30);

varcar2=createCar("red","gg",40);

();

();

上面的代码,从功能上讲,解决了重复创建函数对象的问题,但是从语义上讲,该

函数不太像是对象的方法。

所有这些问题都引发了开发者定义的构造函数的出现。

构造函数方式:

创建构造函数就像创建工厂函数一样容易。

第一步:选择类名,即构造函数的名字。根据惯例这个名字的首字母大写,以使它

与首字母小写的变量名分开。除了这点不同,构造函数看起来很像工厂函数。

functionCar(icolor,imodel,iweight){

=icolor;

=imodel;

=iweight;

=function(){

alert(++);

};

}

varcar1=newCar("green","hh",30);

varcar2=newCar("red","gg",40);

();

();

上面代码与工厂方式的区别:

1、在构造函数内没有创建对象,而是使用this关键字。使用new运算符构造函

数时,在执行第一行代码前先创建一个对象,只有用this才能访问该对象。

2、可以直接赋予this属性,默认情况下是构造函数的返回值。

就像工厂函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。

不过与工厂函数类似,也可以用外部函数重写构造函数,同样的,这么做语义上无任何

意义。

原型方式:

该方式利用了对象的prototype属性,可以把它看成创建对象所依赖的原型。

首先用空构造函数来设置类名。

然后所有的属性和方法都被直接赋予prototype属性。

functionCar(){

}

="green";

="qq";

=30;

=function(){

alert(++);

};

varcar1=newCar();

varcar2=newCar();

原型方式的问题

1、构造函数没有参数。使用原型方式,不能通过给构造函数传递参数来初始

化属性的值。意味着必须在对象创建后才能改变属性的默认值。

2、真正的问题是属性指向的是对象,而不是函数时,函数共享不会造成问题,

但对象却很少被多个实例共享。

functionCar(){

}

="blue";

=4;

=25;s=newArray("Mike","John");

lor=function(){

alert();

};

varoCar1=newCar();

varoCar2=newCar();

("Bill");

alert(s);

alert(s);

//输出"Mike,John,Bill"

//输出"Mike,John,Bill"

混合的构造函数/原型方式

联合使用构造函数和原型方式,就可像其他程序设计语言一样创建对象。这种概念

非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性。

结果是所有函数都只创建一次,而每个对象都具有自己的对象属性实例。

functionCar(icolor,imodel,iweight){

=icolor;

=imodel;

=iweight;

=newArray("hello","world");

}

=function(){

alert(+++);

};

varcar1=newCar("green","ff",30);

varcar2=newCar("blue","dd",40);

("before");

();

();

这种方式是ECMAScript采用的主要方式,它具有其他方式的特性,却没有他们的

副作用。

动态原型方法

动态原型方法的基本想法与混合的构造函数/原型方式相同,即在构造函数内定义非函

数属性,而函数属性则利用原型属性定义。唯一的区别是赋予对象方法的位置。

functionCar(sColor,iDoors,iMpg){

=sColor;

=iDoors;

=iMpg;

s=newArray("Mike","John");

if(typeofCar._initialized=="undefined"){

lor=function(){

alert();

};

Car._initialized=true;

}

}

ECMAScript修改对象

通过使用ECMAScript,不仅可以创建对象,还可以修改已有对象的行为。

prototype属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法。

创建新方法:

可以用prototype属性为任何已有的类定义新方法。

重命名已有的方法

添加与已有方法无关的方法

为本地对象添加新方法

重定义已有方法

极晚绑定


发布者:admin,转转请注明出处:http://www.yc00.com/news/1720055423a2759784.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信