学习js截止到1/5/2018总结

js概念:.javaScript是一种脚本语言,语法和java类似

js引入方式

  1.使用<Script></Script>标签内部样式

  2.使用外部js文件

  3.直接在HTML标签中的行内样式。

js基本数据类型

1,数值型(整数型和浮点型,NaN)

2,字符串型(string)

3,布尔类型(Boolean)

4,undefined

5,null
基本类型转换

1,强制转换:parseInt    parseFloat    Boolean    String    Number;

  1. Boolean(value):把值转换成Boolean类型;                                                                                                                                                                                                                         var t1 = Boolean(“”);//返回false,空字符串 
               var t2 = Boolean(“s”);//返回true,非空字符串 
               var t3 = Boolean(0);//返回false,数字0 
               var t3 = Boolean(1),t4 = Boolean(-1);//返回true,非0数字 
               var t5 = Boolean(null),t6 = Boolean(undefined);//返回false            

  2. Number(value):把值转换成数字;

               Number(false) 0 
               Number(true) 1 
               Number(undefined) NaN 
               Number(null) 0 
               Number(“1.2”) 1.2

               Number(“12”) 12 
               Number(“1.2.3”) NaN 
               Number(new Object()) NaN 
               Number(123) 123

  3. 转化为整型(parseInt ) 

     parseInt() 会将字符串中转换为整数类型。

    Ⅱ. 若遇到非整数字符,则停止转换。

    Ⅲ.若没有进行任何一个字符的转换(即转换一开始就遇到非数字字符),则为 NaN 。

    parseInt() 还有可选的第二参数 radix(值介于 2 ~ 26 之间),它可以实现转换为二进制,八进制,十进制,十六进制等。

    未设置第二参数的特殊情况:

    ①若参数字符以 0x 开头,第二参数就会被默认为十六进制;

    ②若首选参数以 0 开头,第二参数就会被默认为八进制。

               parseInt("1234blue");   //returns   1234
               parseInt("0xA");   //returns   10
               parseInt("22.5");   //returns   22
               parseInt("blue");   //returns   NaN                                                                                                                                                                                                                             parseInt("AF",   16);   //returns   175
               parseInt("10",   2);   //returns   2
               parseInt("10",   8);   //returns   8
               parseInt("10",   10);   //returns   10
  4. 转换为浮点数( parseFloat)注意:浮点型没有基数                                                                                                                                                                                                         parseFloat("1234blue");   //returns   1234.0
               parseFloat("0xA");   //returns   NaN
               parseFloat("22.5");   //returns   22.5
               parseFloat("22.34.5");   //returns   22.34
               parseFloat("0908");   //returns   908
               parseFloat("blue");   //returns   NaN
  5. String(value):把值转换成字符串。(加引号!)


2,隐式转换:通过运算

下面先讲加减乘除:

1.字符串加数字,数字就会转成字符串。

2.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。

3.乘,除,大于,小于跟减的转换也是一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//隐式转换 + - * == /
// +
10 + '20'    //2010
// -
10 - '20'    //-10
10 - 'one'   //NaN
10 - '100a'  //NaN
// *
10*'20'      //200
'10'*'20'    //200
// /
20/'10'      //2
'20'/'10'    //2
'20'/'one'  //NaN

再来看看一组 == 的。

1.undefined等于null

2.字符串和数字比较时,字符串转数字

3.数字为布尔比较时,布尔转数字

4.字符串和布尔比较时,两者转数字

1
2
3
4
5
6
7
// ==
undefined == null;    //true
'0' == 0;            //true,字符串转数字
0 == false;           //true,布尔转数字
'0' == false;       //true,两者转数字
null == false;       //false
undefined == false;  //false
 

要进行各种各样的运算,就要使用不同的运算符号。

1、算术运算符:+-*/%++--

 

       (1)“%”取余运算符,两个数相除,取余数。

              A = 10 % 3;  // A = 1,如果余数不为0,则两个不能整除

           A = 10 % 2;  // A = 0,如果余数为0,则两个数能除尽

       (2)“++”加1运算符、自加1

              “++”可以作前缀(++i),也可以作后缀(i++)。

              如果不赋值的话,i++和++i的结果是一样的。

      如果要赋值的话,i++和++i的结果就不一样了

       (3)“--”减1运算符,自减1

              “--”可以作前缀(--i),也可以作后缀(i--)。

              如果不赋值的话,i--和--i的结果是一样的。

              如果要赋值的话,i++和++i的结果就不一样了

2、赋值运算符:=+=-=*=/=

       “+=”先加后等。如:a += 10  //展开后  a = a + 10

       “-=”先减后等。如:a -= 10   //展开后  a = a - 10

       “*=”先乘后等。如:a *= 10  //展开后  a = a * 10

       “/=”先除后等。如:a /= 10   //展开后  a = a / 10

3、字符串运算符:++=

       字符串只能进行“连接”运算,不能进行其它运算。

       var a = “abc”;

       var b = a + “def”;   // 结果b = a + “def” = “abc” + “def” = “abcdef”

      

       var a = “abc”;

       a += 10;   // 结果a = a + 10 = “abc” + 10 = “abc10”

4、比较运算符:><>=<===!====!==

       比较运算符的运算结果是布尔值(true或false)

       A = 10 > 20;       // 结果A=false

       A = 20>=20;       // 结果A=true

       A = 10%2 == 0;    // 结果A=true

       A = 10%2 == “0”;  // 结果A=true

       A = 10%3 != 0;    // 结果A=true

       A = 10%2 === “0”;  //结果A=false

      

       “=”是赋值号。如:a = 10

       “==”等于。只比较两个变量的,而不管类型。只要值一样,就返回true,否则返回false。

       “===”全等于。既比较变量,也判断类型。如果类型和值都一样,返回true,否则返回false。

 

5、逻辑运算符:&&||!

       逻辑运算符的运算结果有两个true或false

       “&&”逻辑与(并且关系)。如果左右两个操作数都为true,则结果为true,否则,结果为false。

                     逻辑与,就是两个条件同时满足时,则结果为true。

  “||”逻辑或。左右两个条件,只要有一个满足,则返回true,否则,返回false。

  “!”取反运算。!true = false  、   !false = true  、 !100 = false

6、三元运算符:?:

       所谓“三元运算符”就是指三个操作数。

       语法:条件表达式 ? 结果1 : 结果2

       语法:操作数1 ? 操作数2 : 操作数3

       含义:如果条件为true,则执行“结果1”的代码;如果条件为false,则执行“结果2”的代码。

       其实:三元运算符,就是if else的变形形式。


7,type of运算符:type of就是用来判断变量的类型的


声明变量
命名规范:驼峰式;开头字母、下划线、 $;注意:关键字 保留字                                                                                                                                                                                        1、变量命名必须以字母、下划线”_”或者”$”为开头。其他字符可以是字母、_、美元符号或数字。
2、变量名中不允许使用空格和其他标点符号,首个字不能为数字。
3、变量名长度不能超过255个字符。
4、变量名区分大小写。(javascript是区分大小写的语言)
5、变量名必须放在同一行中
6、不能使用脚本语言中保留的关键字、保留字、true、false 和 null 作为标识符。


控制流程
一,控制语句
if else ; switch case;

1.做判断(if语句)

if语句是基于条件成立才执行相应代码时使用的语句。

语法:

if(条件)
{ 条件成立时执行代码}

注意:if小写,大写字母(IF)会出错!

假设你应聘web前端技术开发岗位,如果你会HTML技术,你面试成功,欢迎加入公司。代码表示如下:

<script type="text/javascript">
  var mycarrer = "HTML";
  if (mycarrer == "HTML")
  {
    document.write("你面试成功,欢迎加入公司。");
  }
</script>

2.二选一 (if...else语句)

if...else语句是在指定的条件成立时执行代码,在条件不成立时执行else后的代码。

语法:

if(条件)
{ 条件成立时执行的代码}
else
{条件不成立时执行的代码}

假设你应聘web前端技术开发岗位,如果你会HTML技术,你面试成功,欢迎加入公司,否则你面试不成功,不能加入公司。

代码表示如下:

<script type="text/javascript">
  var mycarrer = "HTML"; //mycarrer变量存储技能
  if (mycarrer == "HTML")
    { document.write("你面试成功,欢迎加入公司。");  }
  else  //否则,技能不是HTML
    { document.write("你面试不成功,不能加入公司。");}
</script>

3.多重判断(if..else嵌套语句)

要在多组语句中选择一组来执行,使用if..else嵌套语句。

语法:

if(条件1)
{ 条件1成立时执行的代码}
else  if(条件2)
{ 条件2成立时执行的代码}
...
else  if(条件n)
{ 条件n成立时执行的代码}
else
{ 条件1、2至n不成立时执行的代码}

4.多种选择(Switch语句)

当有很多种选项的时候,switch比if else使用更方便。

语法:

switch(表达式)
{
case值1:
  执行代码块 1
  break;
case值2:
  执行代码块 2
  break;
...
case值n:
  执行代码块 n
  break;
default:
  与 case值1 、 case值2...case值n 不同时执行的代码
}

语法说明:

Switch必须赋初始值,值与每个case值匹配。满足执行该 case 后的所有语句,并用break语句来阻止运行下一个case。如所有case值都不匹配,执行default后的语句。


二,循环语句

js中的循环语句可分为三种:1.while;2.do……while;3.for。

while的语法为

while (exp) {
    //statements;
}

1
2
3
4
5
6
7
8
9
10
11
12
var a=1,b=0;
        while(a<=1000){
           if(a%2==0){
               if(b%20==0)
               {
                    document.write("<br>第"+parseInt(b/20+1)+"行偶数");
                }
                document.write(a+"&nbsp"+"&nbsp");
                b++;
            }
           a++;
        }

其中,exp为一条件判断语句,最终的结果都可以用一个布尔值表示,若其结果为true则进行下面{}里的语句,然后继续判断exp,直到exp的结果为false为止,若exp的结果为false,则跳过这条循环语句,执行接下来的代码。需要注意的是在{}里的语句必须存在对exp的结果产生影响的代码,否则循环会一直重复下去,形成死循环。

do……while语句与while语句大体上相同,唯一的不同之处是do……while语句会先执行语句,然后对条件进行判断。其语法为

do {
    //statements;
}while (condition);
同样是上面的例子,其结果变为

1
2
3
4
5
6
7
8
9
10
11
12
var a=1,b=0;
        do{
            if(a%2==0){
                if(b%20==0)
                {
                    document.write("<br>第"+parseInt(b/20+1)+"行偶数");
                }
                document.write("<u>"+a+"</u>"+"&nbsp"+"&nbsp");
                b++;            
            }
            a++;
        }while(a<=1000)

 相较于上面的两种循环,for循环显得更为地简洁有效。

for (变量=开始值;变量<=结束值;变量=变量+步进值) {
         需执行的代码 
    } 
()里的三条语句中,第二条为判断语句,只有其结果为真时循环才会执行。

1
2
3
4
5
6
7
8
9
for(var a=1,b=0;a<=100;a++){
    if(a%2==0){
        if(b%20==0)
        {
            document.write("<br>第"+parseInt(b/20+1)+"行偶数");
        }
        document.write("<u>"+a+"</u>"+"&nbsp"+"&nbsp");
     }
}


三,循环控制

 在循环中,有时候我们急需跳出整个循环或某一次的循环语句不进行执行,这时我们需要用到break语句和continue语句。这两个语句都存在于循环语句中,前者终止整个循环,后者阻止某次循环的执行。如

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var n=0,m=0;
for(var i = 1; i < 10; i++){
        if(i == 4){
            continue;
        }
 
        n++;
    }
alert(n);//8
 for(var i = 1; i < 10; i++){
        if(i == 4){
            break;
        }
        m++;
    }
alert(m);//3


break(停止循环语句) continue(跳出当前循环进入下一次循环)
函数的定义:

1,完成某一功能的代码段
2,重复利用
3,方便维护和优化
function定义函数命名注意事项:
1,函数通过return返回值,否则可能出现undefined
2,不能包括特殊字符
3,要有语义化
4,最好驼峰和下划线
5,严格区分大小写
6,名字注意覆盖
7,可以写参数也可以不写,但要注意传参、
8,通过事件(驱动)调用函数
调用函数:
1,通过事件(方法调用)

<input type="button" value="Button 1" id="btn1"  />

<input type="button" value="Button 2" id="btn2"  />
<input type="button" value="Button 3" id="btn3"  onclick="buttonClicked();"/>
 
<script type="text/javascript">
function buttonClicked(){
    var text = (this === window) ? 'window' this.id;
    alert( text );
}
var button1 = document.getElementById('btn1');
var button2 = document.getElementById('btn2');
 
button1.onclick = buttonClicked;
button2.onclick = function(){   buttonClicked();   };
</script>


2,使用构造函数调用函数

 

如果函数调用前使用了 new 关键字, 则是调用了构造函数。

 

这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:

   function Person () {
        // new了 进入构造函数时, p 对象的原型 就指向了 构造函数 Person, 
        // p.__proto__.constructor = function Person() {};
        // 而 this 指的的是 p 对象
        this.name = 'jim',
        this.age = 19;
        this.gender = 'male';
    }
    var p = new Person();

3,回调函数return一个函数在调用一个函数,(call apply)

你越多的使用JavaScript的函数,你就越多的发现你需要传递函数并在不同的上下文里调用他们,就像Qjuery在事件处理函数里所做的一样,你往往经常需要重置this的值.记住我告诉你的,在Javascript中函数也是对象,函数对象包含一些预定义的方法,其中有两个便是apply()和call(),我们可以使用它们来对this进行重置.

 

1
2
3
4
5
var gasGuzzler = { year: 2008, model: 'Dodge Bailout' };
makeArray.apply( gasGuzzler, [ 'one''two' ] );
// => [ gasGuzzler, 'one' , 'two' ]
makeArray.call( gasGuzzler,  'one''two' );
// => [ gasGuzzler, 'one' , 'two' ]


4,全局调用window

 

最常用的方法,但不幸的,全局的函数调用
当我们学习Javascript时,我们了解到如何用上面示例中的语法来定义函数。
,我们也知道调用这个函数非常的简单,我们需要做的仅仅是:

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
makeArray('one''two');
// => [ window, 'one', 'two' ]
 
Wait a minute. What's that window
 
 
alert( typeof window.methodThatDoesntExist );
// => undefined
alert( typeof window.makeArray);
// =>
 
 
window.makeArray('one', 'two');
// => [ window, 'one', 'two' ]


测试代码URI:

    函数功能介绍:
        
        escape()   :     采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都会转化成%xx格式的字符编码(xx代表此字符在字符集表里编码的16进制数字)。比如,空格符的对应编码是%20。不会对ASCII字符和数字进行编码。不会被此方法编码的字符:@ * / +,反向编码函数:unescape()
 
        encodeURI():    把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $ & ( ) = : / ; ? + ',反向编码函数:decodeURI()
        
        encodeURIComponent():把URI字符串采用URF-8编码格式转化成escape格式的字符串。与encodeURI相比,这个函数会将更多的字符进行编码,比如"/"等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个来进行编码。否则“/”字符被编码后将URL显示错误。不会被此方法编码的字符:! * ( ),反向编码函数:decodeURIComponent()
   具体用法:
 
        escape()函数用于js对字符串进行编码。不常用
 
        encodeURI()用于整个url跳转,比如:
               转化前: location.href = "http://localhost:8080/pro?a=1&b=张三&c=aaa";
               转化后: location.href = "http://localhost:8080/pro?a=1&b=%E5%BC%A0%E4%B8%89&c=aaa"
               本例中只是将中文转成%...,传过去再解码就可以拿到中文
 
        encodeURIComponent()用于参数的传递,参数包含特殊字符可能会造成间断。比如:
               var paramUrl = "http://localhost:8080/aa?a=1&b=2&c=3";
               var url = "http://localhost:8080/pp?a=1&b="+ paramUrl ;
                应该使用encodeURIComponent()进行转码,
                结果:http://localhost:8080/pp?a=1&b=http%3A%2F%2Flocalhost%3A8080%2Faa%3Fa%3D1%26b%3D2%23%26c%3D3
posted @ 2018-01-07 17:32  Cclei  阅读(271)  评论(1编辑  收藏  举报