• JavaScript


    JS导入

    js简介

    • 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言)
    • Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript
    • 微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆版叫Jscript.
    • 为了统一三家,ECMA(欧洲计算机制造协会)定义了ECMA-262规范.国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。EcmaScript是规范.

    ECMAScript

    尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:

    • 核心(ECMAScript) 
    • 文档对象模型(DOM) Document object model (整合js,css,html)
    • 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
    • Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的.

    ECMAScript描述以下内容:

    语法、类型、语句、关键字、保留字、运算符、对象(封装、继承、多态)

    js是基于对象的语言,对象已经定义,只要调用即可

    js代码引入方式:

    1、直接编写在script标签
    <script>
        alert("hello world")
    </script>
    
    最好在<body>标签中,否则CSS布局时可能找不到
    
    2、导入文件
    <script src="hello.js"></script>

    JS语法基础

    2.1 js基础规范

    1、每行代码用 ; 来结束,没有分号以换行符来结束

    2、注释:  /* */    //

    3、使用 {} 来封装 代码块

    2.2 变量

    1、弱变量类型(很随便,与Python类似)

    2、无需声明变量类型,使用关键字 var 定义即可(也可不使用var,定义的变量即是全局变量)

    3、一行多变量

    var a=1024,b="hello",c=[1,2,3];

    4、变量命名:

    首字符只能是字母,下划线,$美元符 三选一,且区分大小写,x与X是两个变量
    
    Camel 标记法:首字母是小写的,接下来的字母都以大写字符开头
    var myTestValue = 0, mySecondValue = "hi";
    
    Pascal 标记法:首字母是大写的,接下来的字母都以大写字符开头
    var MyTestValue = 0, MySecondValue = "hi";
    
    匈牙利类型标记法---推荐
    在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i 表示整数,s 表示字符串,如下所示“
    var iMyTestValue = 0, sMySecondValue = "hi";

    2.3 标志符

    1. 不以数字开头的字母、数字、下划线(_)、美元符号($)组成
    2. 用于表示函数、变量等的名称
    3. 例如:_abc,$abc,abc,abc123是标识符,而1abc不是
    4. JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符

    Function对象

    函数定义:

    方法一:
    function 函数名(参数){
        函数体;
        return 返回值;
    }
    
    方法二:
    var 函数名=new Function("参数1","参数n","函数体")
    
    可以使用变量、常量或表达式作为函数调用的参数;
    函数由关键字function定义;
    函数名的定义规则与标识符一致,大小写是敏感的;
    返回值必须使用return;
    
    第二种形式写起来有些困难,但有助于理解函数只不过是一种引用类型

    注释:

    js的函数加载执行方式与Python不同,执行代码时会先加载所有函数,所以函数调用在函数上面也是没问题的

    Function的属性与方法

    function f(a,b,c) {
        console.log("ok")
    }
    console.log(f.length)  //3
    length属性

    内置对象argument:用来获取调用函数时传入的所有实参

    function add(a,b){
    
            console.log(a+b);//3
            console.log(arguments.length);//2
            console.log(arguments);//[1,2]
    
        }
        add(1,2)
    
    //    ------------------arguments的用处1 ------------------
        function nxAdd(){
            var result=0;
            for (var num in arguments){
                result+=arguments[num]
            }
            alert(result)
    
        }
    
        nxAdd(1,2,3,4,5)
    
    //    ------------------arguments的用处2 ------------------
    
        function f(a,b,c){
            if (arguments.length!=3){
                throw new Error("function f called with "+arguments.length+" arguments,but it just need 3 arguments")
            }
            else {
                alert("success!")
            }
        }
    
        f(1,2,3,4,5)
    View Code

     函数作用域与闭包:

     js与Python相似,函数有作用域,控制语句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

    事例:

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

    BOM

    browser object modal:浏览器对象模型,对浏览器窗口进行访问和操作。使用BOM,开发者可以移动窗口、改变状态栏中的文本以及进行其他与页面内容不直接相关的动作。

    使js能与浏览器对话。

    Window对象

    window对象:
        所有浏览器都支持 window对象。
        概念上:一个html文档对应一个window对象;
        功能上:控制浏览器窗口
        使用上:window对象不需要创建,直接使用即可

    对象方法:

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

    事例:

    var num = Math.round(Math.random()*100);
    function acceptInput(){
    //2.让用户输入(prompt)    并接受 用户输入结果
    var userNum = prompt("请输入一个0~100之间的数字!","0");
    //3.将用户输入的值与 随机数进行比较
            if(isNaN(+userNum)){
                //用户输入的无效(重复2,3步骤)
                alert("请输入有效数字!");
                acceptInput();
            }
            else if(userNum > num){
            //大了==> 提示用户大了,让用户重新输入(重复2,3步骤)
                alert("您输入的大了!");
                acceptInput();
            }else if(userNum < num){
            //小了==> 提示用户小了,让用户重新输入(重复2,3步骤)
                alert("您输入的小了!");
                acceptInput();
            }else{
            //答对了==>提示用户答对了 , 询问用户是否继续游戏(confirm).
                var result = confirm("恭喜您!答对了,是否继续游戏?");
                if(result){
                    //是 ==> 重复123步骤.
                    num = Math.round(Math.random()*100);
                    acceptInput();
                }else{
                    //否==> 关闭窗口(close方法).
                    close();
                }
            }
    例1
    <body>
    <input type="text" id="id1" name="input1" onclick="begin()">
    <button onclick="end()">stop</button>
    <script>
    
        function showTime() {
            var curr_time=new Date().toLocaleString();
            var ele=document.getElementById("id1");
            ele.value=curr_time
        }
        var clock1;
        function begin() {
            if (clock1==undefined){
                showTime();
                clock1=setInterval(showTime,1000); /*1秒之后执行showTime函数*/
            }
    
        }
    
        function end() {
            clearInterval(clock1);
            clock1=undefined;
        }
    
    
    </script>
    
    </body>
    setInterval

    History对象

    history对象属性

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

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

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

    history对象方法

    back()     加载history列表中的前一个URL
    forward()  加载history列表中的后一个URL
    go()   加载history列表中的某个具体页面

    Location对象

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

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

    Location对象方法

    location.assign(URL)
    location.reload()
    location.replace(newURL)//注意与assign的区别,无法返回原来的URL

    DOM对象(DHTML)

    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 元素的对象和属性,以及访问它们的方法。
    DHTML

    DOM节点

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

    • 整个文档是一个文档节点(document对象)
    • 每个 HTML 元素是元素节点(element 对象)
    • HTML 元素内的文本是文本节点(text对象)
    • 每个 HTML 属性是属性节点(attribute对象)
    • 注释是注释节点(comment对象)

    画dom树是为了展示文档中各个对象之间的关系,用于对象的导航。

    节点(自身)属性:

    1 attribute     节点的属性节点
    2 nodeType    节点类型
    3 nodeValue   节点值
    4 nodeName   节点名称
    5 innerHTML   节点所有内容
    6 innerText     节点所有文本内容

    导航属性:

    parentNode - 节点(元素)的父节点 (推荐)
    firstChild – 节点下第一个子元素  // 紧挨的下个节点,并不是标签
    lastChild – 节点下最后一个子元素
    childNodes - 节点(元素)的子节点 

    以上不够精准,推荐使用下面的属性:

    1. parentElement              // 父节点标签元素
    
    2. children                        // 所有子标签
      
    3. firstElementChild          // 第一个子标签元素
    
    4. lastElementChild           // 最后一个子标签元素
    
    5. nextElementtSibling       // 下一个兄弟标签元素
    
    6. previousElementSibling  // 上一个兄弟标签元素

    以上查找都是根据一个已知标签来定位另外一个标签,

    还可根据以下方法(标签自带的属性)查找一类标签:

    标签属性id:   getElementById()
    标签名:     getElementsByTagName()
    标签属性name:getElementsByName()
    标签属性class: getElementsByClassName()

    也可只在局部查找:

    但是只支持 getElementsByClassName()  和 getElementsByTagName()

    <div id="div1">
    
        <div class="div2">i am div2</div>
        <div name="yuan">i am div2</div>
        <div id="div3">i am div2</div>
        <p>hello p</p>
    </div>
    
    <script>
    
       var div1=document.getElementById("div1");
    
    ////支持;
    //   var ele= div1.getElementsByTagName("p");
    //   alert(ele.length);
    ////支持
    //   var ele2=div1.getElementsByClassName("div2");
    //   alert(ele2.length);
    ////不支持
    //   var ele3=div1.getElementById("div3");
    //   alert(ele3.length);
    ////不支持
    //   var ele4=div1.getElementsByName("yuan");
    //   alert(ele4.length)
    局部查找

    node增删改查

     增:三步

    1.创建标签

    2.找到父标签

    3.加到父标签下

    var new_ele=document.createElement("div");  //创建新标签对象
    var p_ele=document.getElementById("div");  //找到父集标签
    new_ele.innerText="fuck you man";  //给新标签添加文本
    p_ele.appendChild(new_ele);  //添加到父级标签内

    删:

    1.获得要删除的元素

    2.获得它的父元素

    3.父元素.removeChild(元素)

    改:

    第一种:先删除然后重新增加

    第二种:使用setAttribute()方法修改属性;使用innerHTML属性修改元素内容

    查:

     

  • 相关阅读:
    JAVA_基础集合List接口与Set接口(二)
    JAVA_基础集合Collection接口与Iterator迭代器(一)
    JAVA_基础注解的概念
    JAVA_基础多线程的生命周期、线程安全、线程锁、线程通信与创建线程(二)
    JAVA_基础多线程(一)
    JAVA_基础异常概述与异常体系的结构
    JAVA_基础内部类
    JAVA_基础面向对象:接口
    Golang 学习资源
    go语言-异常处理机制-panic和recover的使用和原理
  • 原文地址:https://www.cnblogs.com/chenzhuo-/p/6400831.html
Copyright © 2020-2023  润新知