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条)