智能社Js笔记——Js基础2

 
二、Js基础及深入
 
1、JS组成
ECMAScript: 翻译 解释器 核心           人们写的东西翻译成0 1 给计算机     计算机的0 1 解释成人么可以看懂的
DOM:Document Object Model(文档对象模型) 赋予JS操作HTML能力  document对象
BOM:Browser Object Model   赋予JS操作浏览器的能力  window对象
     各组成部分的兼容性,兼容性问题由来
     
ECMA:  几乎没有兼容性问题
DOM:    有一些操作不兼容
BOM:     没有兼容问题(完全不兼容)
 
 
2、变量
------变量类型
--类型 typeof运算符
用法typeof a、返回值;
常见类型:number、string、boolean、undefined、object、function
                    undefine: 1. 真的没定义; 2. 虽定义,未赋值;
经验:一个变量应该(最好)只存放一种类型的数据;
 
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>typeof</title>
    <script type="text/javascript">
        var a=true;
            alert(typeof a);
        var b=function (){
            alert("abc");
        };
            alert(typeof b);
    </script>
</head>
<body>
 
</body>
</html>
 
 
 
 
 
-------类型转换
------显示类型转换(强制类型转换)  parseInt()(字符串转整型)     parseFloat(字符串转浮点型)
-字符串转整数 parseInt()     //从左到右扫描,遇到非数字跳出          NaN    not a number   非数字       NaN和NaN不相等    检测一个结果是否是非数字 isNaN()
-字符串转小数  parseFloat()
 
------隐式类型转换
-   == 先转换类型,然后比较
-   ===不转换类型,直接比
-    -  //数字相减
 
计算两个文本框的和
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>parseInt字符串转整数</title>
    <script type="text/javascript">
     window.onload=function (){
         var oTxt1=document.getElementById("txt1");
         var oTxt2=document.getElementById("txt2");
         var oBtn=document.getElementById("btn1");
         oBtn.onclick=function (){
             if(isNaN(oTxt1.value)){
                 alert("输入的第一个数有误");
             }else if (isNaN(oTxt2.value)) {
                 alert("输入的第二个数有误");
             }else{
                 alert(parseInt(oTxt1.value)+parseInt(oTxt2.value));
             }
 
         };
     };
    </script>
</head>
<body>
    <input id="txt1" type="text" /> +
    <input id="txt2" type="text" />
    <input id="btn1" type="button" value="求和" />
</body>
</html>
 
 
-------变量作用域和闭包
------变量作用域(作用范围)
            局部变量:只能在定义它的函数里面使用        
            全局变量:在任何地方都能用
------闭包
               子函数可以使用父函数中的局部变量;
               之前一直在使用闭包
               网上对于闭包的定义
 
 

3、命名规范

----命名规范及必要性
           可读性——能看懂
           规范性——符合规则
-----匈牙利命名法
           类型前缀
           首字母大写 
               
 
 
 
 
 
 
4、运算符
算数:+  -  *  /  % (取模应用:隔行变色)
赋值:=  +=  -=  *=  /=  %=
关系: <  >  <=  >=  ==  ===  !=  !==
逻辑:&&与 并且    ||或  !否
 
 
隔行变色
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>隔行变色</title>
    <script type="text/javascript">
        window.onload=function (){
            var aLi=document.getElementsByTagName("li");
            for(var i=0; i<aLi.length; i++){
                if(i%2==0){
                    aLi[i].style.background="#ccc";
                }else{
                    aLi[i].style.background=" ";
                }
            }
        };
    </script>
</head>
<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>
 
 
 
5、程序流程控制
判断: if     switch    ?:三元运算符
循环:while   for
中断: break(整个循环中断)   continue(中断本次循环)
什么是真 、什么是假: (真: true、非零数字、非空字符串‘false’、非空对象)    (假: false、数字0、空字符串、空对象 null 、 undefined ,数字NaN)
 
if语句
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>判断n是两位数</title>
    <script type="text/javascript">
        window.onload=function (){
            var n=4;
            //有错误,如果n是浮点数的话,判断有误
            if(n>9 && n<100){
                alert("n是两位数");
            }else{
                alert("n不是两位数");
            }
        };
    </script>
</head>
<body>
 
</body>
</html>
 
 
switch语句
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>根据男女信息问候</title>
</head>
<script type="text/javascript">
    var name="abc";
    var sex="女";
    switch (sex){
        case "男":
            alert(name+"先生,你好");
            break;
        case "女":
            alert(name+"女士,你好");
            break;
        default:
            alert(name+"你好");
    }
</script>
<body>
</body>
</html>
 
 
6、Json( 基于JavaScript语言的轻量级的数据交换格式(JavaScript Object Notation))
什么是Json: 用来描述JS里面的数据
Json和数组: 跟数组有点像,用来存数据的     json['a']   arr[0]         json没有length
      var a=12; var b=5; var c="abc"
var json={a: 12,  b: 5 ,  c: “abc”}    json.a    放在json里的东西可以当做变量使用;
Json和for in
循环   碰到数组: for(var i=0; i<*.length; i++)        也可以for(var i in arr) (最好还是用前面的一种)
          碰到json: for(var i in json)
 
 
 
 
 
 
7、 函数返回值(函数把一些东西传到外面来)
什么是函数返回值
     函数的执行结果
     可以没有返回值
一个函数应该只返回一种类型的值
 
 
 
8  函数传参
可变参(不定参):arguments
     参数的个数可变,参数数组    var result=0;   for(var i=0; i<arguments.length; i++){ result+=arguments[i]; }  return result;
 
例子1:求和
     求所有参数的和
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>arguments求和</title>
</head>
<script type="text/javascript">
    window.onload=function (){
        function sum(){
            var result=0;
            for(var i=0; i<arguments.length; i++){
                result+=arguments[i];
            }
            return result;
        }
        //arguments代表不定参
        alert(sum(12,4,12,4));
    };
</script>
<body>
 
</body>
</html>
 
 
判断arguments.length
给参数取名,增强可读性
 
例子2:CSS函数
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>arguments css函数</title>
    <script type="text/javascript">
        //用arguments来表示;
        // function css(){
        //     if(arguments.length==2){
        //         return arguments[0].style[arguments[1]];
        //     }else{
        //         arguments[0].style[arguments[1]]=arguments[2];
        //     }
        // }
 
        //用obj,name,value参数来代替
        function css(obj, name, value){
            if(arguments.length==2){
                return obj.style[name];
            }else{
                obj.style[name]=value;
            }
        }
 
        window.onload=function (){
            var oDiv=document.getElementById("div1");
            //alert(css(oDiv, "width"));
            css(oDiv, "width", "300px");
        };
    </script>
</head>
<body>
    <!-- 运行函数css,当有两个参数时,代表获取,当有3个参数时,代表设置; -->
    <div id="div1" style=" 200px; height: 200px; background: red; "></div>
</body>
</html>
 
 
取非行间样式(不能用来设置)      style只能获取行间样式              currentStyle可以获取非行间样式
          obj.currentStyle[attr]
getComputedStyle(obj,false)[attr]
复合样式:background border 等;    单一样式: width  height color等      不能取复合样式   只能取单一样式
JS第二定律:但凡是好东西,大多不兼容
// IE
odiv.currentStyle.width
//chrome FF          IE8以下不兼容
getComputedStyle(oDiv, null).width (第二个参数是个垃圾   随便什么都行  null false 都可以)
 
 
在所有浏览器下兼容代码
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>获取非行间样式</title>
    <style type="text/css">
        #div1{ 100px; height: 100px; background: red;}
    </style>
    <script type="text/javascript">
    window.onload=function (){
        var oDiv=document.getElementById("div1");
            //style只能用于获取行间样式
        // alert(oDiv.style.width);
            //IE 下currentStyle用于获取非行间样式
        // alert(oDiv.currentStyle.width);
            //chrome FF 下用getComputedStyle(obj,null)[name]来获取非行间样式
        //alert(getComputedStyle(oDiv,null).width);
 
 
        //考虑兼容性问题
        if(oDiv.currentStyle){
            //IE
            alert(oDiv.currentStyle.width);
        }else{
            //chrome FF
            alert(getComputedStyle(oDiv, null).width);
        }
 
    };
    </script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>
 
 
 
 
封装成函数
 
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>获取非行间样式封装成函数</title>
    <style type="text/css">
        #div1{ 100px; height: 100px; background: red;}
    </style>
    <script type="text/javascript">
        function getStyle(obj, name){
            if(obj.currentStyle){
                alert(obj.currentStyle[name]);
            }else{
                alert(getComputedStyle(obj, null)[name]);
            }
        }
 
        window.onload=function (){
            var oDiv=document.getElementById("div1");
            //没法取复合样式,如background,border是由很多成员组成的
            getStyle(oDiv, "width");
        };
    </script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>
 
 
 
9、数组基础
数组的使用
     定义
          var arr=[12,5,8,9]
          var arr=new Array(12,5,8,9)
          没有任何差别,[]性能略高,因为代码短
数组的属性
     length
          既可以获取,又可以设置
          例子:快速清空数组
数组使用原则:数组中应该只存一种类型的变量
 
 
10、数组方法
添加/删除(头部、尾部)
var arr=[1,2,3];
arr.push(4)        尾部添加
arr.pop()          尾部删除
arr.unshift()     从头部添加
arr.shift()         从头部删除、
 
插入/删除/替换   (中间)
splice(起点,长度)     删除元素 从什么位置开始删  删多少个       splice(2, 3)  从第二个后面删,不包括第二个
splice(起点,0,元素)     插入元素  从什么位置开始删0个   再插入多个元素   arr.splice(2,0,'a','b','c');   
splice(起点,长度,元素)     替换元素   从什么位置开始删  删多少个   再插入多个元素    arr.splice(2,2,'a','b','c')
 
排序/连接
排序
     sort(【比较函数】,排序一个数组)
          排序一个字符串数组
          排序一个数字数组
     例子://从小到大排序                        可以简化  arr.sort(function (n1, n2 ){return n1-n2;})
               var arr=[12,8,99,19,112]
               arr.sort(function(n1,n2)){
                    if(n1<n2)               //n1<n2,n1应该出现在n2之前,返回一个小于0的数;
                    {
                         return -1;
                    }
                    
                    else if(n1>n2)               
                    {
                         return 1;
                    }
 
                    else          
                    {
                         return 0;
                    }
               }
 
转换类
     concat(数组2)
          连接两个数组 
var a=[1,2,3];
var b=[4,5,6];
a.concat(b);
 
     join(分隔符)
     var a=[1,2,3,4];
          a.join("-")
          用分隔符,组合数组元素,生成字符串
          字符串split
 
 
 
 
 
原文地址:https://www.cnblogs.com/Marilyn-xml/p/5224605.html