打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Python之路】特别篇

ECMA对象

  从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。

  ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。

  var o = new Object();

对象的概念与分类:

  • 由ECMAScript定义的本地对象.独立于宿主环境的 ECMAScript 实现提供的对象.(native object)

  • ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现.这意味着开发者不必明确实例化内置对象,它已被实例化了。ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。(built-in object)

  • 所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。所有 BOM 和 DOM 对象都是宿主对象。

object对象:ECMAScript 中的所有对象都由这个对象继承而来;Object 对象中的所有属性和方法都会出现在其他对象中

ToString() :  返回对象的原始字符串表示。ValueOf()  : 返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。

11种内置对象

  Array ,String , Date, Math, Boolean, Number  Function, Global, Error, RegExp , Object

  在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,

  String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是通过对象实现的

<script language="javascript">var aa=Number.MAX_VALUE; //利用数字对象获取可表示最大数var bb=new String("hello JavaScript"); //创建字符串对象var cc=new Date();//创建日期对象var dd=new Array("星期一","星期二","星期三","星期四"); //数组对象</script>

   

 

Function 对象

函数的定义:

1
2
3
function 函数名 (参数){
函数体;
    return 返回值;
}

功能说明:

  • 可以使用变量、常量或表达式作为函数调用的参数

  • 函数由关键字function定义

  • 函数名的定义规则与标识符一致,大小写是敏感的

  • 返回值必须使用return

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

创建function 方式:

function 函数名 (参数){    
函数体;   return 返回值;}// 方式二:var 函数名 = new Function("参数1","参数n","function_body");

虽然由于字符串的关系,第二种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,

它们的行为与用 Function 类明确创建的函数行为是相同的。

js的函数加载执行与python不同,它是整体加载完才会执行,所以执行函数放在函数声明上面或下面都可以:

<script>    //f(); --->OK    function f(){        console.log("hello")    }    f() //----->OK</script>

Function 对象的 length 属性

函数属于引用类型,所以它们也有属性和方法。

比如,ECMAScript 定义的属性 length 声明了函数期望的参数个数。

1
alert(func1.length)

Function 对象的方法

Function 对象也有与所有对象共享的 valueOf() 方法和 toString() 方法。这两个方法返回的都是函数的源代码,在调试时尤其有用。

1
alert(void(fun1(1,2)))

运算符void()作用:拦截方法的返回值

函数的调用

function func1(a,b){    alert(a+b);}    func1(1,2);  //3    func1(1,2,3);//3    func1(1);    //NaN    func1();     //NaN    //只要函数名写对即可,参数怎么填都不报错.-------------------面试题----------- function a(a,b){    alert(a+b);}   var a=1;   var b=2;   a(a,b)

函数的内置对象arguments

View Code

匿名函数

var func = function(arg){    return "tony";}

函数自执行

( function(arg){...} )('参数')

函数的作用域链和闭包

作用域

  js的作用域和py相似,if while等控制语句并没有自己作用域;而函数是有自己的作用域的;

if(1==1){    var s=12;}console.log(s);//12// ----------------------function f(){    var temp=666;}f();console.log(temp);   //Uncaught ReferenceError: temp is not defined

嵌套函数的作用域:

例1:

var city = 'beijing';function func(){    var city = 'shanghai';    function inner(){        var city = 'shenzhen';        console.log(city);    }    inner();}func();

例2:

var city = 'beijing';function Bar(){    console.log(city);}function func(){    var city = 'shanghai';    return Bar;}var ret = func();ret();    //beijing

闭包 :

var city = 'beijing';function func(){    var city = "shanghai";    function inner(){        // var city = "langfang";        console.log(city);    }    return inner;}var ret = func();ret();

作用域链(Scope Chain):

      在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

var x=1;function foo() {    var y = 2;        function bar() {        var z = 3;    }}#bar的作用域链: barScopeChain=[bar.AO, foo.AO, global.VO];#foo的作用域链: fooScopeChain=[foo.Ao, global.VO];

AO,VO:

  在函数创建时,每个函数都会创建一个活动对象Active Object(AO),全局对象为Global Object(VO);

  创建函数的过程也就是为这个对象添加属性的过程,作用域链就是由这些绑定了属性的活动对象构成的。

  例如:找x变量;bar函数在搜寻变量x的过程中,先从自身AO对象上找,如果bar.AO存在这个属性,那么会直接使用这个属性的值,如果不存在,则会转到父级函数的AO对象,也就是foo.AO 如果找到x属性则使用,找不到继续 在global.VO对象查找,找到x的属性,返回属性值。如果在global.VO中没有找到,则会抛出异常ReferenceError

执行上下文:

  函数在执行时会创建一个称为“执行上下文(execution context)”的内部对象,执行上下文定义了函数 执行时的环境。

  每个执行上下文都有自己的作用域链,用于标识符解析,当执行上下文被创建时,而它的作用域链初始化为当前运行函数的[[Scope]]所包含的对象。

函数执行:

  在函数执行过程中,每遇到一个变量,都会检索从哪里获取和存储数据,该过程从作用域链头部,也就是从活 动对象开始搜索,查找同名的标识符,如果找到了就使用这个标识符对应的变量,如果没有则继续搜索作用域 链中的下一个对象,如果搜索完所有对象都未找到,则认为该标识符未定义,函数执行过程中,每个标识符都 要经历这样的搜索过程。

创建作用域链的过程:

  函数进入全局,创建VO对象,绑定x属性<入栈>    global.VO={x=underfind; foo:reference of function}(这里只是预解析,为AO对象绑定声明的属性,函数执行时才会执行赋值语句,所以值是underfind)  遇到foo函数,创建foo.AO,绑定y属性<入栈>    foo.AO={y=underfind, bar:reference of function}  遇到bar函数,创建bar.AO,绑定z属性<入栈>    bar.AO={z:underfind}  作用域链和执行上下文都会保存在堆栈中,所以:    bar函数的scope chain为:[0]bar.AO-->[1]foo.AO-->[2]global.VO    foo函数的scope chain为:[0]foo.AO-->[1]global.Vo    //建议:少定义全局变量    //理由:因为作用域链是栈的结构,全局变量在栈底,每次访问全局变量都会遍历一次栈,//这样会影响效率

函数的scope等于自身的AO对象加上父级的scope,也可以理解为一个函数的作用域等于自身活动对象加上父级作用域.

函数执行前后的作用域链:

  

    
  

注意:作用域链的非自己部分在函数对象被建立(函数声明、函数表达式)的时候建立,而不需要等到执行

思考题:

View Code

 

String对象

自动创建字符串对象:

1
var str1="hello world";

调用字符串的对象属性或方法时自动创建对象,用完就丢弃

手工创建字符串对象

1
var str1= new String("hello word");

采用new创建字符串对象str1,全局有效

String对象的属性

1
2
// 获取字符串长度
length

  

 

 

String对象的方法(1) —— 格式编排方法

格式编排方法返回值列表

View Code

String对象的方法(2)——  大小写转换

View Code

String对象的方法(3) —— 获取指定字符

View Code

String对象的方法(4)——  查询字符串

View Code

String对象的方法(5) ——子字符串处理

截取子字符串

View Code

替换子字符串

View Code

分割字符串

View Code

连接字符串

View Code

 

Array对象

  Array 对象用于在单个的变量中存储多个值

创建数组对象

创建方式1:var a=[1,2,3];创建方式2:new Array();     //  创建数组时允许指定元素个数也可以不指定元素个数。new Array(size);//if 1个参数且为数字,即代表size,not content    初始化数组对象:    var cnweek=new Array(7);        cnweek[0]="星期日";        cnweek[1]="星期一";        ...        cnweek[6]="星期六";new Array(element0, element1, ..., elementn)//也可以直接在建立对象时初始化数组元素,元素类型允许不同var test=new Array(100,"a",true);

创建二维数组

View Code

Array对象的属性

  获取数组元素的个数:length

Array对象的方法

连接数组-join方法

View Code

连接数组-concat方法

View Code

数组排序-reverse sort

View Code

数组切片-slice

View Code

删除子数组

View Code

数组的进出栈操作(1)

View Code

数组的进出栈操作(2)

View Code

总结js的数组特性:

View Code

 

Date对象

创建Date对象

//方法1:不指定参数var nowd1 = new Date();alert(nowd1.toLocaleString( ));
//方法2:参数为日期字符串var nowd2=new Date("2004/3/20 11:12");alert(nowd2.toLocaleString( ));
var nowd3=new Date("04/03/20 11:12");alert(nowd3.toLocaleString( ));
//方法3:参数为毫秒数var nowd3=new Date(5000);alert(nowd3.toLocaleString( ));alert(nowd3.toUTCString());//方法4:参数为年月日小时分钟秒毫秒var nowd4=new Date(2004,2,20,11,12,0,300);alert(nowd4.toLocaleString( ));//毫秒并不直接显示

Date对象的方法—获取日期和时间

View Code

练习实例:

View Code

Date对象的方法—设置日期和时间

View Code

Date对象的方法—日期和时间的转换

View Code

 

RegExp对象

  在表单验证时使用该对象验证用户填入的字符串是否符合规则.

View Code

 

Math对象

View Code

 

BOM对象

  BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。

  使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。

  使 JavaScript 有能力与浏览器“对话”。 

window对象

  所有浏览器都支持 window 对象。

  概念上讲.一个html文档对应一个window对象.

  功能上讲: 控制浏览器窗口的.

  使用上讲: window对象不需要创建对象,直接使用即可.

Window 对象方法

alert()            显示带有一段消息和一个确认按钮的警告框。confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。prompt()           显示可提示用户输入的对话框。open()             打开一个新的浏览器窗口或查找一个已命名的窗口。close()            关闭浏览器窗口。setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。clearInterval()    取消由 setInterval() 设置的 timeout。setTimeout()       在指定的毫秒数后调用函数或计算表达式。clearTimeout()     取消由 setTimeout() 方法设置的 timeout。scrollTo()         把内容滚动到指定的坐标。

交互方法:

View Code

History 对象

History 对象属性

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

  History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。

1
length   // 返回浏览器历史列表中的 URL 数量。

History 对象方法 

back()       // 加载 history 列表中的前一个 URL。forward()    // 加载 history 列表中的下一个 URL。go()         // 加载 history 列表中的某个具体页面。
View Code

Location 对象

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

  Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

Location 对象方法

location.assign(URL)location.reload()location.replace(newURL)       //注意与assign的区别location.href='URL'

 

DOM对象

  DOM 是 W3C(万维网联盟)的标准。DOM 定义了访问 HTML 和 XML 文档的标准:

  W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

  W3C DOM 标准被分为 3 个不同的部分:

 

    • 核心 DOM - 针对任何结构化文档的标准模型

 

    • XML DOM - 针对 XML 文档的标准模型
    • HTML DOM - 针对 HTML 文档的标准模型
  • 什么是 XML DOM?  ---->XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法。

  • 什么是 HTML DOM?---->HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。

DOM 节点 

  根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点(NODE):

  • 整个文档是一个文档节点(document对象)

  • 每个 HTML 元素是元素节点(element 对象)

  • HTML 元素内的文本是文本节点(text对象)

  • 每个 HTML 属性是属性节点(attribute对象)

  • 注释是注释节点(comment对象)

节点(自身)属性:

  • attributes - 节点(元素)的属性节点

  • nodeType – 节点类型

  • nodeValue – 节点值

  • nodeName – 节点名称

  • innerHTML - 节点(元素)的文本值

导航属性:

  • parentNode - 节点(元素)的父节点 (推荐)

  • firstChild – 节点下第一个子元素

  • lastChild – 节点下最后一个子元素

  • childNodes - 节点(元素)的子节点 

注意:

View Code

推荐导航属性:

parentElement            // 父节点标签元素children                 // 所有子标签firstElementChild        // 第一个子标签元素lastElementChild         // 最后一个子标签元素nextElementtSibling      // 下一个兄弟标签元素previousElementSibling   // 上一个兄弟标签元素

节点树中的节点彼此拥有层级关系。

父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)

  • 每个节点都有父节点、除了根(它没有父节点)

  • 一个节点可拥有任意数量的子

  • 同胞是拥有相同父节点的节点

下面的图片展示了节点树的一部分,以及节点之间的关系:

         

访问 HTML 元素(节点),访问 HTML 元素等同于访问节点,我们能够以不同的方式来访问 HTML 元素:

页面查找:

  • 通过使用 getElementById() 方法 

  • 通过使用 getElementsByTagName() 方法 

  • 通过使用 getElementsByClassName() 方法 

  • 通过使用 getElementsByName() 方法 

局部查找:

View Code

HTML DOM Event(事件)

  HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),

  比如当用户点击某个 HTML 元素时启动一段 JavaScript。

  下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。

onclick        当用户点击某个对象时调用的事件句柄。ondblclick     当用户双击某个对象时调用的事件句柄。onfocus        元素获得焦点。               //练习:输入框onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.onkeypress     某个键盘按键被按下并松开。onkeyup        某个键盘按键被松开。onload         一张页面或一幅图像完成加载。onmousedown    鼠标按钮被按下。onmousemove    鼠标被移动。onmouseout     鼠标从某元素移开。onmouseover    鼠标移到某元素之上。onmouseleave   鼠标从元素离开onselect       文本被选中。onsubmit       确认按钮被点击。

两种方式为元素附加事件属性:

<div onclick="alert(123)">点我呀</div><p id="abc">试一试!</p><script>    var ele=document.getElementById("abc");    ele.onclick=function(){        alert("hi");    };</script>

注意:

View Code

onload:

  onload 属性开发中 只给 body元素加.

  这个属性的触发 标志着 页面内容被加载完成.

  应用场景: 当有些事情我们希望页面加载完立刻执行,那么可以使用该事件属性.

onsubmit:

  当表单在提交时触发. 该属性也只能给form元素使用.

  应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.

Event 对象

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

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

  event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.

  比如onkeydown,我们想知道哪个键被按下了,需要问下event对象的属性,这里就是KeyCode;

事件传播:

View Code

增删改查演示

node的CURD:

增:

1
2
createElement(name)      // 创建元素
appendChild()            // 将元素添加

 

:

1
2
3
获得要删除的元素
获得它的父元素
使用removeChild()方法删除

改:

  第一种方式:

    使用上面增和删结合完成修改

  第二中方式:

    使用setAttribute();方法修改属性          

    使用innerHTML属性修改元素的内容

:  

  使用之前介绍的方法.

View Code

修改 HTML DOM 

改变 HTML 内容 

        改变元素内容的最简答的方法是使用 innerHTML ,innerText。

改变 CSS 样式 

1
2
3
<p id="p2">Hello world!</p>
document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontSize=48px

改变 HTML 属性 

        elementNode.setAttribute(name,value)

        elementNode.getAttribute(name)<-------------->elementNode.value(DHTML)

创建新的 HTML 元素 

        createElement(name)

删除已有的 HTML 元素 

        elementNode.removeChild(node)

关于class的操作 

        elementNode.className

        elementNode.classList.add

        elementNode.classList.remove

 

实例练习

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
37道WEB前端开发面试题之JavaScript篇章!
最详细的JavaScript和事件解读 – 码农网
分析内存泄露,一个前端工程师需要掌握的技能
如何处理 JavaScript 内存泄露
前端基础进阶(三):变量对象详解
JavaScript中的预编译如何进行
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服