02 - 数组 | 字符串 | 节点


本文是针对刚学编程的小白,都是一些基础知识,如果想了解更多深层一点的东西,欢迎移步本人博客 !!

博客地址 点击跳转



------------------ 数组-------------------


数组的声明

<script>
    // 数组的声明方式
    var arr = [1,2,5,5];   // 数组名[索引值];  索引号的顺序从0开始
    var arr = new Array(1,4,6);
    var testArr = ["刘备","关羽","张飞","诸葛亮"];
    console.log(testArr[3]);
    //  数组的长度  数组.length
    console.log(testArr.length);
    //  遍历数组 这种方式会让系统每次都去检测一次数组的长度
    for(var i = 0; i < testArr.length; i++){
        console.log(testArr[i]);
    }
   // 而这种方式则不会 相比较而言 是这种遍历方式好点
    for(var i = 0, len = testArr.length; i < len; i++){
        console.log(testArr[i]);
    }
</script>

创建数组

var numArray = new Array();

数组元素的添加

    //1.创建数组
    var numArray = new Array();
    var arr = [];  // 这种比较常用
    //2.添加元素 push();
    var a = numArray.push(1);
    alert(numArray)
    var b =  numArray.push(2);
    console.log(numArray);
    console.log(a);
    console.log(b);
    //push():会在数组的结尾处添加一个元素,改变原来的数组,返回值是数组的长度
    //2.第二种添加元素 unshift():
    var aa = numArray.unshift(0);
    console.log(numArray);
    console.log(aa);
    //unshift():会在数组的开始添加一个元素,会改变数组,返回值是数组的长度

数组元素的删除

    var numArray = [1,2,3,3,4,4,5];
    //1.删除元素  pop(); 和push() 对应
    var a =   numArray.pop();
    console.log(a);
    console.log(numArray);
    //从数组的最后删除元素,返回删除的元素
    //2.从开头删除元素 shift():和unshift():对应
    var aa =  numArray.shift();
    console.log(aa);
    console.log(numArray);
    //shift会改变数组,返回被删除的元素

数组元素的连接

    var array1 = [1,2,3,3,5,4];
    var array2 = [2,3,3,,35,5];
    // concat(array2): 数组里面的元素用concat()来连接
    var allArray = array1.concat(array2);
    console.log(allArray);
    console.log(array1);
    console.log(array2);

数组的转化方法

    var array =[1,3,5,7,9];
    //1.数组转化字符 join(); 传入连接符
    //如果join方法中传入什么就会把数组用什么连接起来
    var arrStr = array.join('-');
    console.log(arrStr);

    //2.字符串转化数组  split();
    //split会把字符转化成数组,但是这个字符必须是有规律的
    var newArray =  arrStr.split('-');
    console.log(newArray);

数组的排序

    var numArray  = [1,3,20,5,30,6,36,21];
    //数组排序
    //numArray.sort();
    //console.log(numArray);
    //sort以及排序,但是是通过ascii转化后排序的,不能达到我们要的效果

    //使用函数与参数
    numArray.sort(function(a,b){
        // 可以理解为1为true , -1为false
        // 返回true则从小到大排序 , 返回false则从大到小排序
        return a>b?1:-1;
    });
    console.log(numArray);
    //函数参数必须写,会把数组中的元素进行传递,不可以直接写1 或者-1
    //返回值不一定是1 或者-1,可以是任何数字

------------------ 字符串---------------------


字符的转化

    var a = 10;
    //1.第一种  直接使用引号
    var newString = a +'';
    console.log(typeof newString);
    console.log(newString);

    //2.第二种  使用String();方法
    var newString1 = String(a);
    console.log(typeof newString1);
    console.log(newString1);

获取某一个位置的字符

    var charString = 'my name is tack 我的名字是';
    console.log(charString.length);
    //空格也占用位置

    //获取元素
    var sym =  charString.charAt(0);
    console.log(sym);
    // charAt();  返回指定位置的字符.

    var codeSym = charString.charCodeAt(20);
    //charCodeAt:把获取的值转化成unicode编码后显示
    console.log(codeSym);
    //汉字转换成Unicode编码后都是大于127,一般汉字占位2个字节,其余占用1个

获取字符串占用的字节数

    var myString = 'my name 我的名字 abc';
    console.log(myString.length);
    var totalLength = 0;
    for(var i = 0;i < myString.length;i ++){
        //获取对应的字符的unicode编码
        var charNum = myString.charCodeAt(i);
        if (charNum > 127){
            totalLength +=2;
        }
        else {
            totalLength +=1;
        }
    }
    console.log(totalLength);

获取某个字符的位置

    var charString = 'my is abc dcf a';
    //获取某一个字符的位置
    var poiont = charString.indexOf('n');
    console.log(poiont);
    //indexOf:会获取传入的字符的位置,位置从左到右边
    //如果获取到第一个元素后,就会返回第一个获取元素的位置,如果没有对应的元素就会返回-1;

    var newPoint = charString.lastIndexOf('a');
    console.log(newPoint);
    //lastIndexOf:从后往前找对应的元素
    //如果找到就会把对应的位置返回,但是注意位置排序还是从左到右

字符大小写转化

    var lowString = 'abc cddfff';
    //转化成大写 toUpperCase();
    var newLowString = lowString.toUpperCase();
    console.log(newLowString);
    //大小写方法不会改变原来的字符,返回值是对应转化后的结果
    
    //转化成小写 toLowerCase();
    var newString2 = newLowString.toLowerCase();
    console.log(newString2);

字符截取

    var charString = 'my name is abc cdf';
    //字符截取 slice();
    var sliString = charString.slice(1);
    console.log(sliString);
    //slice:如果传入一个参数,表示从这个参数的位置开始截取直到字符结束
    //如果传入两个参数,表示从第一个参数位置开始截取到第二个参数位置结束
    //但是不包括第二个参数的位置
    var newSliString = charString.slice(1,4);
    console.log(newSliString);


    var subS = charString.substr(1);
    console.log(subS);
    //substr:如果传入一个参数,和slice是一样
    var newSubS = charString.substr(1,4);
    console.log(newSubS);
    //如果传入两个参数,会从第一个参数开始,截取第二个参数长度对应的字符

    var newSubString1 = charString.substring(4,2);
    console.log(newSubString1);

保留两位小数

    var num = 3.141591653;
    var numString = String(num);
    //1.0截取字符
    //1.1获取小数点的位置
    var index = numString.indexOf('.');//1
    var newString =  numString.slice(0,index+3);
    console.log(newString);
    console.log(Number(newString));
    //2.通过方法直接设置
    var newNum =  num.toFixed(2);//传入参数表示保留几位小数
    console.log(newNum);

------------------ 定时器--------------------


补充一点定时器的知识


定时器

  • 在定时器中使用的this表示的是winodow,如果要是使用按钮我们需要在外面记录对应的this,形式是 var that ; that = this
  • 定时器:每隔一段时间执行一个操作,操作一般是一个事件指令
  • 定时器的分类:一次定时,多次定时
  • 一次定时器:执行一次后就不执行
  • 多次定时器:会执行多次,一直执行

一次定时器

setTimeout(function () {
        alert('我是一次定时器');

    },1000);
  • 一次定时器中传入两个参数,第一个参数表示执行的操作,第二个表示间隔的时间
  • 时间是毫秒,1秒= 1000毫秒

多次定时器

    setInterval(function(){
        alert('我是多次定时器')
    },1000);
  • 多次定时器中传入两个参数,第一个参数表示执行的操作,第二个表示间隔的时间
  • 多次定时器会执行多次操作
  • 定时器在使用完成后,不会自动清空,我们需要手动清空
    clearTimeout(timeOut)
    clearInterval(timeInter);

------------------ 节点 --------------------


Js的组成

// ECMAscript
// Dom
// Bom
//可以把一个界面看做一个dom,每一元素都看做一个节点
//会把文本对象看做节点

父子节点

<div class="box">
    ![](images/taobao.png)
    <span id="x">x</span>
</div>
<style>
        .box{
            border: 1px solid #d9d9d9;
            margin: 100px auto;
            position: relative;
            width: 107px;
        }
        #x{
            float: left;
            display: block;
            border: 1px solid #d9d9d9;
            width: 14px;
            height: 14px;
            line-height: 14px;
            color: #d6d6d6;
            cursor: pointer;
            position: absolute;
            top: 0;
            left: -15px;
        }
</style>
<script>
        window.onload = function(){
            var x = document.getElementById("x");
            x.onclick = function(){
                // parentNode 父子节点 必须是亲的
                this.parentNode.style.display = "none";
            }
        }
</script>

兄弟节点

<script>
        /*
        nextSibling (下一个兄弟,包含文本节点)  只有IE 6/7/8认识 别的浏览器不兼容
        nextElementSibling (不包含文本节点)  其他浏览器兼容的
        previousSibling  (上一个兄弟)
        previousElementSibling  其他浏览器兼容的
        firstChild   只有IE 6/7/8认识 别的浏览器不兼容
        firstElementChild      其他浏览器兼容的
        lastChild    只有IE 6/7/8认识 别的浏览器不兼容
        lastElementChild  其他浏览器兼容的
        */
        window.onload = function(){
            var one = document.getElementById("one");
            // one.nextSibling.style.backgroundColor = "red";   只有IE6/7/8认识
            // 这是一种兼容写法 one.nextElementSibling 一定要写在前面
            var div = one.nextElementSibling || one.nextSibling;
            div.style.backgroundColor = "red";
        }
</script>

<ul>
    <li>123214124</li>
    <li>123214124</li>
    <li id="one">123214124</li>
    <li>123214124</li>
    <li>123214124</li>
</ul>

孩子节点

<ul id="ul">
    <li>123</li>
    <li>212</li>
    <li>331</li>
</ul>
<script>
    // childNodes 嫡出(正式推出的)
    var ul = document.getElementById("ul");
    // 选择全部的孩子 火狐 谷歌等高版本浏览器会把换行和空格也当作一个节点
    var children = ul.childNodes;  
    // 所以输出 7  但是IE6/7/8 不会把换行当作节点 输出三个节点 
    //  alert(children.length);   
    for(var i = 0; i < children.length; i++){
        // 利用nodeType == 1时 才是元素节点 来获取元素节点
        if(children[i].nodeType == 1){ 
            children[i].style.backgroundColor = "red";
        }
    }
    //  children 庶出 但是很重要 选取全部的孩子(只有元素节点) 没有兼容性的问题
    var ul = document.getElementById("ul");
    var children = ul.children;
    alert(children.length); //  IE 6/7/8 包含注释节点 这个要避免开
</script>

节点操作


<!--
    DOM的节点操作 新建节点 插入节点 删除节点 克隆节点 等等

    创建节点: document.createElement(" ");

    插入节点: appendChild(创建的节点); 添加孩子 放到盒子的最后面
             insertBefore(插入的节点,参照的节点); 写满两个参数 放到盒子的前面

    移除节点: removeChild(); 移除孩子

    克隆节点: cloneNode();   复制节点 见谁复制谁
             括号里面可以跟参数 如果里面是true 深层复制 除了复制盒子 还复制子节点
             如果为false 浅层复制 只复制本节点 不复制子节点
-->
<div id="demo">
    <div id="two"></div>
    <div id="xiongda"></div>
</div>
<script>
    var demo = document.getElementById("demo");
    var childrens = demo.children;
    // 创建节点
    var firstDiv = document.createElement("div");
    // 插入节点
    demo.appendChild(firstDiv);
    // 创建节点
    var test = document.createElement("div");
    demo.insertBefore(test,null);
    // 如果没有参照节点 就写null 那么默认会把新生成的盒子放在最后面

    // 移除节点
    var da = document.getElementById("xiongda");
    demo.removeChild(da);  // 移除xiongda的节点

    // 克隆节点
    var last = childrens[0].cloneNode();
    demo.appendChild(last);
    // 给他的爸爸添加孩子 就是我的兄弟
    demo.parentNode.appendChild(demo.cloneNode(true));
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容