首页 » JavaScript » ECMAScrip内置对象,BOM模型和DOM模型

ECMAScrip内置对象,BOM模型和DOM模型

原文 http://blog.csdn.net/mf_happying/article/details/79030577

2018-01-16 02:00:05阅读(4505)

一.javascript-ecmascript有11个内置对象
Array(数组),String,Data,Math,Boolean,Number,Function(函数),Global,Error,RegExp(正则),Object(自定义)
1.Function对象
函数创建方式一

<script>
            function func1() {
                alert(123)
                return 8;
            }
            var ret=func1()//函数执行结果 123
            alert(ret) //返回值  8
</script>

函数创建方式二:

<script>
    //var func2=new Function("参数1","参数n","函数体");
    var add=new Function("a","b","alert(a+b)")
    add(1,2)
    alert(add.length)//参数长度:2
</script>

函数创建方式三

<script>
        function fun=function () {
            alert(123)
        }
</script>

自执行函数定义

<script>
        (function (arg) {
            console.log(arg)
        })('123')
</script>

阻拦方法的返回值–Undefined

<script>
            function f() {
                return 6;
            }
            alert(f())//6
            alert(void(f()))//Undefined
</script>

全局变量和局部变量

<script>
   function f() {
      var b=6;//局部变量
      }
   f();
   alert(b);//Uncaught ReferenceError: b is not defined
   //去掉var就变成了全局变量,能够执行
</script>
<script>
    function a(a,d) {//a是一个变量
       alert(a,d)
        }
    var a=1;
    var d=2
    a(a,d);//Uncaught TypeError: a is not a function
</script>

实现1+2+3+4+5

<script>
        var ret=0;
        function add() {
            alert(arguments.length)//5
            console.log(arguments.length)//5
            console.log(arguments)//结果是数组
            for(var i in arguments){
                ret+=arguments[i];
            }
            return ret;
        }
        alert(add(1,2,3,4,5))//15
</script>

函数自定义异常

<script>
        function fun(){
            if (arguments.length!=3){
                throw new Error("param should be 3");
            }
        }
        fun(1,2,3,4,5)//参数个数是5--Uncaught Error: param should be 3
</script>

2.String对象

<script>
        //创建1
        var s="hello"
        //创建2
        var s2=new String("hello2")
        //string对象的属性
        alert(s.length);//字符串长度
        //遍历字符串
        for (var i in s){
            console.log(s[i])
        }
        //格式编排的方法
        //打印到页面
        document.write(s.bold())//加粗
        document.write("<br>")
        document.write(s.italics())//斜体
        document.write("<br>")
        document.write(s.anchor())//锚
        document.write("<br>")
        document.write(s.toUpperCase())//转换为大写
        document.write("<br>")
        document.write(s.toLowerCase())//转换为小写
        document.write("<br>")
        document.write(s.charAt(3))//根据索引位置取值
        document.write("<br>")
        document.write(s.charCodeAt())//根据索引位置取字符编码
        document.write("<br>")
        document.write(s.search("l"))//返回第一个l的索引位置
        document.write("<br>")
        document.write(s.match("l"))//返回的数组里面有所有的匹配个数---2
        document.write("<br>")
        document.write(s.replace("e","E"))//替换,不会影响原来的字符串hEllo
        document.write("<br>")
        document.write(s.split("e"))//得到一个数组,分割----h,llo
        document.write("<br>")
        document.write(s.concat("world"))//将两个字符串拼接
        document.write("<br>")
        //截取字符串
        document.write(s.substr(1,2))//el
        document.write("<br>")
        document.write(s.substring(1,4))//ell
        document.write("<br>")
        document.write(s.slice(1,-1))//ell
        document.write("<br>")
        document.write(s.indexOf("l"))//通过字符串取索引值---2
        document.write("<br>")
        document.write(s.lastIndexOf("l"))//取得最后一个字符为l的索引值---3
</script>

3.Array

<script>
        //创建方式1
        var arr=[1,2,3]
        //创建方式2
        var arr2=new Array(1,2,3)
        //如果采用初始化对象方式创建数组,如果里面只有一个值而且是一个数字,那么数字表示的是长度而不是内容
        var arr3=new Array(3);
        console.log(arr3[0])
        arr3[5]=10;
        console.log(arr3.length)//6
        //二维数组
        var arr4=new Array(5,"hello",true,[1,3])
        alert(arr4[3][1])//3
        //数组对象的方法
        //1.join方法:将数组里面的字符串拼接成为一个字符串,join方法的方法不同于在python,在js中只有Array
        s1="hello"
        s2="world"
        var ret=[s1,s2].join("+++")
        console.log(ret)//hello+++world
        //队列==先进先出  栈==后进先出
        //栈操作--shift  unshift   pop  push
        var arr5=[1,4,6]
        arr5.push(13)
        console.log(arr5)//[1, 4, 6, 13]
        arr5.push("hello",7)
        console.log(arr5)//[1, 4, 6, 13, "hello", 7]
        var ret=arr5.pop()
        console.log(ret)//按顺序删除最后一个元素7
        arr5.unshift(45)
        console.log(arr5)//[45, 1, 4, 6, 13, "hello"]首端入栈
        arr5.shift()
        console.log(arr5)//[1, 4, 6, 13, "hello"]首端出栈
        //排序
        var arr6=[1,6,3,2]
        arr6.reverse()
        console.log(arr6)//[2, 3, 6, 1]
        console.log(arr6.sort())//[1, 2, 3, 6]按aciis码排列的,想要按照大小排序必须要自定义函数
</script>

4.Date

<script>
//创建
        var date_obj1=new Date();
        alert(date_obj1.toLocaleDateString())//显示当前日期2018/1/12
        var date_obj2=new Date("2016/2/20")
        alert(date_obj2.toLocaleDateString())//2016/2/20
        var date_obj3=new Date(5000)
        alert(date_obj3.toUTCString())//Thu, 01 Jan 1970 00:00:05 GMT
        alert(date_obj1.getFullYear())//2018
        alert(date_obj1.getMonth())//1
        alert(date_obj1.getDay())//可返回表示星期的某一天的数字
        alert(date_obj1.getDate())//可返回月份的某一天。
</script>

打印2018年1月12日11:11:0星期六

<script>
        function gettime() {
            var date_obj=new Date()
            var year=date_obj.getFullYear()
            var month=date_obj.getMonth()+1
            var day=date_obj.getDate()
            var hour=date_obj.getHours()
            var minute=date_obj.getMinutes()
            var second=date_obj.getSeconds()
            var week=date_obj.getDay()
            // return year+"年"+f(month)+"月"+day+"日"+hour+":"+minute+":"+second+""+getWeek(week)
            return year+"年"+month+"月"+day+"日"+hour+":"+minute+":"+second+getWeek(week)
        }
        function getWeek(n) {
                week=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
                return week[n]
            }
        function f(num) {//小于10的月前面要加0
            if (num < 10) {
                return "0" + num
            }
            return num
        }
        alert(gettime())
</script>

5.RegExp

<script>
        //方式一
        //new RegExp(pattern [, flags]) \
        //flag:标志可以具有以下值的任意组合
        //g 全局匹配;找到所有匹配,而不是在第一个匹配后停止
        //i 忽略大小写
        //m 多行; 将开始和结束字符(^和$)视为在多行上工作
        // (也就是,分别匹配每一行的开始和结束(由 \n 或 \r 分割),
        // 而不只是只匹配整个输入字符串的最开始和最末尾处。
        //u Unicode; 将模式视为Unicode序列点的序列
        //y 粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex
        // 属性指示的索引(并且不尝试从任何后续的索引匹配)。
        var re_obj=new RegExp("\d+","g")
        alert(re_obj.test("abcdf352"))//测试当前正则是否能匹配目标字符串。
        //方式二
        var re_obj2=/d+/g
        re_obj2.test("sgjds")
        var s="absjks45sd"
        alert(s.match(/\d+/g))//取出所有匹配内容
        alert(s.search(/\d+/g))//取出第一个匹配结果的索引值
        alert(s.split(/\d+/g))//将按照匹配内容分割
        alert(s.replace(/\d+/g,"*"))//将所有匹配内容替换
</script>

正则表达式中特殊字符的含义可以通过百度搜索
6.Math–是一个内置对象,可以直接使用,不需要实例化

<script>
        alert(Math.ranDOM())//(0,1)之间的随机数
        alert(Math.round(2.8))//近似整数  3
        //取0-100的随机数
        var num=Math.random()*100;
        num=Math.round(num)
        alert(num)
        alert(Math.pow(2,3))//2的3次方
</script>

二.BOM–浏览器对象模型
可以对浏览器窗口进行访问和操作,使用BOM开发者可以移动窗口,改变状态栏中的文本,以及执行其他和页面不相干的动作,使javascript有能力和浏览器对话
BOM有3种对象:Window对象,location对象,history对象
1.Window对象:所有的浏览器都支持window对象,一个html文档对应一个Window对象,作用是控制浏览器窗口,window对象不需要创建对象就可以直接使用。
//交互功能命令
alert():显示带有一段消息和一个按钮的警告框
confirm():显示带有一段消息以及确认按钮和取消按钮的对话框
prompt():显示可以提示用户输入的对话框
实现一个定时器功能

<script>
        function begin(){
            var start_time=gettime()//获取当前时间
            var ret=document.getElementById("clock")//在文档树中找到id为clock的标签
            ret.value=start_time//在文本框中输入时间
        }
        var ID//定义一个局部ID
        function begin_click(){
            if(ID==undefined){//第一次点击的时候没有值,假如没有这步判断多次点击start,
                // end后定时器失控--点击一次begin就会产生一个定时器,ID值会被覆盖,而定
                // 时器不会停止,最后一次clear的仅仅是最后一次的ID
            begin()//一点击就立刻执行,而不是点击后过1s执行
            ID=setInterval(begin,1000)//设置定时器,将ID修改为全局   setinterval是循环运行的
                }
        }
        function end_click() {
            clearInterval(ID)//这样才能在end_click函数中调用ID
            ID=undefined
        }
        function gettime() {
            var date_obj=new Date()
            var year=date_obj.getFullYear()
            var month=date_obj.getMonth()+1
            var day=date_obj.getDate()
            var hour=date_obj.getHours()
            var minute=date_obj.getMinutes()
            var second=date_obj.getSeconds()
            var week=date_obj.getDay()
            return year+"年"+month+"月"+day+"日"+hour+":"+minute+":"+second+getWeek(week)
        }
        function getWeek(n) {
                week=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
                return week[n]
            }
        function f(num) {//小于10的月前面要加0
            if (num < 10) {
                return "0" + num
            }
            return num
        }
    </script>
</head>
<body>
    <input type="text" id="clock">
    <input type="button" value="begin" onclick="begin_click()">
    <input type="button" value="end" onclick="end_click()">
</body>

执行结果:点击start出现当前时间并开始计时,点击end停止计时
setTimeout方法用处比较多,通常用在页面刷新了、延迟执行了等等

<head>
<script>
function Timeout() {
            alert(123)
        }
        function fun() {
            var ID=setTimeout(Timeout,1000)//1s后触发Timeout函数--setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。setTimeout只运行一次
            // clearTimeout(ID)取消
        }
        </script>
</head>
<body>
    <input type="button" value="timeout" onclick="fun()">
</body>

2.history对象
history内部有三种方法:forward,back,go,一个属性:length
网页上的后退功能

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function fun() {
            history.back()
        }
    </script>
</head>
<body>
    <input type="button" value="back" onclick="fun()">
    <a href="history.html">lesson</a>
</body>
<body>
    #刷新页面
    <input type="button" value="重载" onclick="location.reload()">
    #跳转到新页面
    <input type="button" value="跳转" onclick="location.href='http://www.baidu.com'">
</body>

三.DOM(Document object Model)
是w3c(万维网联盟)的标准,Dom定义了访问Html和Xml的文档的标准
w3c标准被划分为3个标准
1)核心DOM针对任何结构化文档的模型
2)XML DOM针对HML文档的模型
3)HTML DOM针对HML文档的模型

导航属性:
    ele.parentNode父节点的节点
    ele.firstChild节点的第一个子元素
    ele.lastChild节点的最后一个子元素
    ele.childNodes节点的子节点
    ele.attributes节点的属性节
节点(自身)属性:
    ele.nodeType节点的类型
    ele.nodeValue节点值
    ele.nodeName节点名称
    ele.innerHTML节点的文本值
<body>
    <div id="div1">hello
        <div class="div2">hello 2</div>
        <div class="div3">hello 3</div>
        <p>hello 4</p>
    </div>
    <script>
        var ele=document.getElementById("div1")//hello hello2 hello3 hello4
        var ele2=ele.firstChild//找到第一个子元素
        alert(ele2.nodeName)//#text
        var ele_sons=ele.children//所有子元素
        alert(ele_sons.length)//3
        alert(ele_sons[0])//[object HTMLDivElement]
        for(var i=0;i<ele_sons.length;i++){
            console.log(ele_sons[i])
            // <div class="div2">hello 2</div>
            // <div class="div3">hello 3</div>
            // <p>hello 4</p>
        }
        //简写
        // var ele=document.getElementById("div").firstChild;
        var sib=ele.nextElementSibling//返回指定节点之后紧跟的节点,在相同的树层级中。
        alert(sib.nodeName)//SCRIPT
    </script>
</body>

页面查找方法–全局查找

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="div1">hello
        <div class="div2">hello 2</div>
        <div class="div3" name="cooc">hello 3</div>
        <p>hello 4</p>
    </div>
</body>
</html>
<script>
        //通过class寻找对象
        var ele=document.getElementsByClassName("div2")[0]//取出第一个class="div2"的元素
        alert(ele.innerHTML)//hello 2
        var ele2=ele.nextElementSibling
        alert(ele2.innerHTML)//hello 3
        //通过id寻找对象
        var temp=document.getElementById("div1")
        //通过tag寻找--标签名
        var tag=document.getElementsByTagName("p")
        alert(tag[0].innerHTML)//hello 4
        //通过name属性
        var Name=document.getElementsByName("cooc")
        for(i in Name){
            console.log(Name[i].innerHTML)//hello3
        }
</script>

局部查找

<body>
    <div id="div1">hello
        <div class="div2">hello 2</div>
        <div class="div3" name="cooc">hello 3
            <p id="ppp">hello inner</p>
            <p class="ppp">hello inner2</p>
        </div>
        <p>hello p</p>
    </div>
</body>
</html>
<script>
     //局部查找可以通过tag
    var ele=document.getElementsByClassName("div3")[0]
    var ele2=ele.getElementsByTagName("p")[0]
    alert(ele2.innerHTML)
    //局部查找不可以通过id
    var ele3=ele.getElementById("ppp")
    alert(ele3.innerHTML)
     //局部查找可以通过class
    var ele4=ele.getElementsByClassName("")
    alert(ele4)
     //局部查找不可以通过name
    var ele5=ele.getElementsByName("cooc")
    alert(ele5)
</script>

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹