zoukankan      html  css  js  c++  java
  • 转战JS(1) 初探与变量类型、运算符、常用函数与转换

    转战JS(1)初探与变量类型、运算符、常用函数与转换

      做为一名.NET后台开发人员,正考滤向Web前端开发转型,之前也写过一代前端代码,可是当再回头看JS,并有转向它的意愿的时候,突然发现:原来JS不是那么简单的。很多的细节部分以前都没有注意到,现在把学习的知识点记录下来,做为学习笔记,好时不时看看。如果有什么错误,还请各位看官多多包涵、多多指正。

      JavaScript是一门轻量型的面向Web编程的脚本言语言,常被简称为:JS。广泛应用于PC和各种移动设备中,常和HTML、CSS一起组成网页页面。它也常被一些人和Java相关连起来,然而实质上它们完全是两种不同的编程语言(当我遇到这事后,才相信原来还真有人这么认为)。JavaScript的运行,需要解释器(“引擎”),为浏览器的一部分。本章的内容为:

      1、  JS的引用、注释;

      2、  变量与数据类型

      3、  运算符与表达式

      4、  常用函数对象

      5、  类型转换

      写在之前:写程序的重要一项工作就是调试,在这个系列中,所有的调试都是用Chrome浏览器。操作方法为:打开浏览器后按”F12”,定位到”Control”选项卡,在输入栏中输入代码即可。如果是HTML页面中JS代码调试,则要定位到”Source”选项卡,在必要的地方打上断点。

    一JavaScript的引用与注释

    1.1 引用

      1)  写在<head />标签之中,通过<script type=”text/javascript”> … <script>的方式使用。这种方式是把所有的JS代码写在名为.html .php .aspx .jsp这类文件当中,方便查看,但通常不能复用(母版除外)。

      2)  将名为以.js为后缀的形如<名称>.JS 的js文件写在别处,然后通过<script src=”文件路径” type=”text/javascript” ></script>的方式使用。这种方式便于重用和统一管理,修改一个地方,所有使用相同JS代码段的地方的效果随之改变。

      3)  写在页面文件当中,但在<head />之外。它和第一种方式类似,不同的是加载的时间不同,当运行到这个地方时就会被执行,随DOM结构一起加载;而第一种方式而不随DOM结构加载。

    1.2 注释

      JS的注释有两种方式,注释不会运行。

      1)  单行注释:var sum = 1 + 1;//在双斜杠之后,且在这一行类,的内容都是注释内容。

      2)  多行注释:也叫块注释,它的特点是一次能注释多行,以/* 开头,以*/  结束,在这之间的内容都是注释部分。

    1.3 例子

      下面这个例子解释了JavaScript的引用方式和注释:

     1 <!DOCTYPEhtml>
     3 <htmlxmlns="http://www.w3.org/1999/xhtml">
     5 <head>
     7 <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
     9 <title></title>
    11 <scriptsrc="../Scripts/jquery-1.7.1.min.js"></script>
    13 <!--这是第二种引用方式,它的特点是这个文件里的代码可以很方式的重用-->
    15 <scripttype="text/javascript">
    17 //这是第一种引用方式
    19         alert(1);
    21 </script>
    23 </head>
    25 <body>
    27 <div>
    29 <scripttype="text/javascript">
    31             alert(3);
    33 /*这是第三种方式*/
    35 </script>
    37 </div>
    39 </body>
    41 </html> 

      注:

      1)  大家注意到的<!-- -->,这也是一种注释方式,但它是属于HTML的。

      2)  而alert(内容),则是js的一种提示形式,保存为.html后用浏览器打开便可看到效果。

      3)  每一条语句结束后,以分后做为标识符,表示这一条语句结束。通常情况下,这个分号可以省略,但标准的编程规范和在一些特殊场合(如在写一些函数,插件时),则要求这个分号不能省略。

    二变量与数据类型

          2.1 变量

      和所有其它的编程语言一样,JavaScript也有变量和与它相对应的变量类型。变量是存储信息的容器,而存储的信息的特征,就叫数据的类型。比如:数字形如:1 2 3,可以进行算术运算。布尔类型形如: true false,可以进行逻辑成立和逻辑否定的标识。做为一门弱类型的语言,JavaScript的变量在定义时,统一采用var 做为关键字。一个完整的变量的定义形式如下:

    var sum;

      var 是变量的标识关键字。Sum是这个变量的名称。这里只定义了一个变量,可通过下面的形式给这个变量赋一个值。

    sum = 5;

      也可把这两条语句结合在一起:

    var sum = 5;

      在定义一个变量的同时,给它赋上一个值的形式,就叫做变量初始化(变量赋初值)。

      如果要一次性定义多上变量,可以将多个变量写在一行,中间用逗号分隔,而在前面只写一个变量标识即可:

    Var max = 10,min = 1;

          2.2强类型与弱类型

             先前讲了JavaScrip是一门弱类型类的语言。如果一门语言可以隐式且正确的转换成它的几乎所有变量类型,这样的语言就可简单的称为弱类型(var temp = 123; console.log(temp + "456");)。与此相对的强类型则是大部分的类型都不能隐式转换(C#的int可转为 double)。更准备和详细的解释可baidu。

          2.3数据类型

             虽然JS变量定义的关键字都是var ,但根据赋给它的值的不同,这个变量就会拥有不同的类型。通过“typeof 变量名” 的方式查看数据类型,如:var t = 1; console.log(typeof t);

    常用类型

        Boolean类型:var isN = true;console.log(typeof isN);       它只有true 和false 两种值。

        Number类型:var Num = 1; console.log(typeof Num);      在JS中整数和小数均为number类型。

        String类型:  var str = "123"; console.log(typeof str);     表示字符串,单引号和双引号均能正确的表示成string类型。

        Object类型: var tim = new Date();console.log(typeof tim);  一系列属性的无序集合。除了日期外,还是数组、对象均为object。

                var arr = new Array(1,2,3);console.log(typeof arr);

                var obj = {'zs': '','age':14};console.log(typeof obj);

        null类型:一个空值,唯一的值是null,表示空引用。

        undefined类型:没有定义或赋值的变量(JS变量也遵循”变量先定义,后使用”后原则)。

        NaN类型:非数字类型。

    三运算符与表达式

             程序的作用就是展示与运算。有了变量,就有各个变量之间的运算。主要分为以下几种运算符:算术运算符、赋值运算符、

          3.1 算术运算符

        [加]Var zhi = 1 + 2; //结果:zhi = 3

        [减]Var zhi = 2 1; //结果:zhi = 1

        [乘]Var zhi = 2 * 2; //结果:zhi = 4

        [除]Var zhi = 2 / 2; //结果:zhi = 1

        [取模(求余)]Var zhi = 4 % 3; //结果:zhi = 1

        [自增,自增再赋值]Var t = 5; var zhi = t++; //结果:t = 5; zhi = 5[先把t赋值给 zhi ,然后t再自增1]

        [自减,自减再赋值]Var t = 5; var zhi = t--; //结果:t = 4; zhi = 4[先把t赋值给 zhi ,然后t再自减1]

        [自增,先赋值再自增]Var t = 5;var zhi = ++t; //结果:t = 5;zhi = 5[t 先自增1,再把t赋值给zhi]

        [自减,先自减再赋值]Var t = 5;var zhi = --t;//结果:t = 5;zhi = 5[t 先自减1,再把t赋值给zhi]

    3.2 赋值运算符

             [简单赋值] var zhi = 5;

             [加等] var zhi = 5;zhi += 5; //结果:zhi = 10 相当于zhi = zhi + 5;

             [减等] var zhi = 5;zhi -= 5; //结果:zhi = 0 相当于zhi = zhi – 5;

             [乘等] var zhi = 5;zhi *=5; //结果: zhi = 25 相当于zhi = zhi * 5;

             [除等] var zhi = 5;zhi /=5; //结果:zhi = 1 相当于 zhi = zhi / 5;

             [模等] var zhi = 5;zhi %=3; //结果: zhi = 2 相当于zhi = zhi % 3;

    3.3 逻辑运算符

             逻辑运算符的结果只有true 和 false 两种值。True也叫真,false也叫假。

             [逻辑或,有一个为真就为真]  var a = true;var b = false;console.log(a||b);结果为:true

             [逻辑与,有一个为假就为假]  var a = true;var b = false;console.log(a&&b);结果为:false

             [逻辑非]             var a = true;console.log(!a);结果为:false。如果为真,就返回假;如果为假,就返回真

             在这里要注意一个非常有意思的事件:

          当:var a = 3,b = 5,c = 7;if(a<b||c++)console.log(c);输出 7 C的结果为7

          当:var a = 3,b = 5,c = 7;if(a>b||c++)console.log(c);输出 8 C的结果为8

             对于if(…)中的条件,返回的结果都为真,那是因为无论前面的计算结果怎样,C的值转换为逻辑值时始终为真。而造成if(…)的结果都为真,但C 的值不同的情况,是因为:当前面计算结果为真时,忽略后面的运算。

    3.4 关系运算符

      关系运算符执行的是比较运算,每个关系运算符返回的结果都是一boolen值[true 或false]。

      [大于]var a = 2,b = 3;console.log(a>b);返回fasle

      [小于] var a = 2,b = 3;console.log(a<b);返回 true

      [大于或等于]var a = 2,b = 2;console.log(a>=b);返回true

      [小于或等于]var a = 2,b = 2;console.log(a<=b);返回true

    3.5 三目运算符(条件运算符)

      在C语言里也有这么一个运算符,先入为主,我就叫它“三目运算符”了,在W3School中,叫它“条件运算符”。用一行代符来替代if()…else…,形式如下:

    Var zhi = 条件?exp1:exp2;

    它表示:如果”条件“返回结果为true(真),那么就执行exp1,否则就执行exp2;常见形式为:

      1)    var zhi = a > b ? a : b;//它表示,如果 a 大于 b,就把a 的值赋给zhi,否则就把 b 的值赋给 zhi,exp为值

      2)    var a = 3,b = 8,c = 5;var zhi = a>b?b>c?c:b:a>c?c:a;console.log(zhi);返回三个数的取小值,exp为表达式

    3.6 重新赋值时的变与不变

             JavaScript中的原始值undefinde 、null 、boolen 、数字和字符串是不能更改的,任何一次看似重新的赋值,实则是返回了一个新的值给变量。

         JavaScript的变量和众多的其它编程语言的数据类型一样,也可划分为“值类型”和“引用类型”。当给一个变量赋值的时候,就会在内存中给它分配一存存储空间,用于存储这个值,然后让这个变量去指向它。值类型是指当进行数据的复制时:a = b;是在内存中新建一块存储空间,这个存储空间中存储的就是b的值,然后让a去指向它,这就是“值复制”,复制完成后对a的值的修改不会影响到b。而引用类型则是当执行: a = b;时,是让a 去指向b所指向的内存空间,a和b共用一个存储空间,因此当修改了a的值时,b的值也会发生更改(这么说或许并不严谨,打个比比方:b为了放苹果,找了一个盒子来存放。然后它告诉a说你可以在什么地方去拿,而a觉得不好吃,就换成了西瓜。因为b只能在那个地方去拿,因此它拿到的也就是西瓜了)。

    四常用函数对象

    注意:在Javascript里,是区分大小写的

    数学函数:

      随机数:        Math.random()生成一个大于等于0小于1.0的伪随机数

                          [得到介于10的随机数:   parseInt(Math.random()*10)]

      四舍五入:       Math.round(5.62389)//6返回最接近的整数

      向上取整(开花板函数):   Math.ceil(5.12313)// 6不论小数点后面大小如何,向上取整

      向下取整(地板函数):  Math.floor(5.9555)//5不论小数点后面大小如何,向下取整

      绝对值:        Math.abs(-5)//5

      返回取大值:      Math.max(1,5,6);//6

      返回取小值:      Math.min(1,5,6);//1

      算术平方根:      Math.sqrt(4)//2

      幂运算:        Math.pow(2,4); //16

      保留指定小数位:    变量.toFixed(保留的小数位数)

    在运算中,如果数据溢出,则返回Infinity;操作失败则返回NaN

    日期时间函数

      创建日期时间:   var time = new Date();

                                    结果:Wed Jun 11 2014 15:27:41 GMT+0800 (中国标准时间)

      取年份:      var time = new Date(); time.getYear();结果 114【当前是2014年】

      取完整年份:    var time = new Date(); time.getFullYear();结果2014

      取月份:      var time = new Date(); time.getMonth(); 结果:5【当前是6月】

                      说明:js取月份是从0开始计数,因此在实际使用中,常为year = time.getMonth()+1

      取日:      var time = new Date(); time.getDate();结果:11【当前是11号】

      取时:      var time = new Date(); time.getHours();

      取分:      var time = new Date(); time.getMinutes();

      取秒:      var time = new Date(); time.getSeconds();

      取时间戳:    var time = new Date(); time.getTime();

      星期几:       var time = new Date(); console.log(time.getDay());

      指定日期:    var t = new Date(2016,5,6);console.log(t.getFullYear());

    字符串函数

      取长度:      var str = "123abc中国人";console.log(str.length);由此可见无论是中文、数字还是英文字符,均只占一个长度。

      查找指定位字符:     var str = "123abc中国人";console.log(str.charAt(6));//中,在指定字符串中查找索引为6的字符,从0开始计位。[查找最后一位字符:str.charAt(str.length-1)]

      字符串截取:    var str = "123abc中国人";console.log(str.substring(1,3));结果:23。从截取指定索引开始到指定索引结束的字符,当只有一个参数时,表示从指定索引开 始,到后面的整个字符结束

      字符串截取:    var str = "123abc中国人";console.log(str.substr(1,3));结果:23a。从指定索引开始,共截取多少个字符

      字符串截取:    var str = "123abc中国人";console.log(str.slice(1,3));和substring()一样

      字符串截取(从后数):  var str = "123abc中国人";console.log(str.slice(-1));从后面开始,共截取指定长度字符。

      首次出现的索引位置:   var str = "123abc中国人";console.log(str.indexOf("a"));//3,未找到时返回 -1

      最后一次出现的位置:  var str = "123abc中国a人";console.log(str.lastIndexOf("a"));//8

      从指定位置开始查找指定字符首次出现的索引位置:  var str = "123abca中国a人";console.log(str.indexOf("a",4));//返回6。从索引4开始查找指定字符第一次出现的位置

      字符串分割为数组  :var str = "11@qq.com;22@qq.com";console.log(str.split(";"));//结果为:["11@qq.com", "22@qq.com"]

      将数组按指定字符串组合成数组:  var array = ["11@qq.com", "22@qq.com"];console.log(array.join(";")); //结果为:”11@qq.com;22@qq.com”

      字符串替换:  var str = "我爱中国";console.log(str.replace("爱","很爱"));//结果为:我很爱中国。用后面的字符串替换掉前面的字符[后面的替换掉前面的,这一点在JS的很多地方都有体现]

      所有英文大写转换为小写:  var str = "abcABC中国人"; console.log(str.toLowerCase());//结果为:abcabc中国人

      所有英文小写转换为大写:  var str = "abcABC中国人"; console.log(str.toUpperCase());//结果为:ABCABC中国人

      另外,如果要访问某个字符串中的指定索引的值,还可能像访问数组一样的访问。比如:

    var str = "abcderg";console.log(str[2]); //返回结果为:c

      但是要注意的是,这种方式并不被IE8之前的浏览器所支持

    数组函数

      所有操作,当数组为空时返回undefined。数组索引从0开始

      数组:  var arr = [1,2,3];

      删除第一个索引(下标)值:shift();

    var arr = [1,2,3];var t = arr.shift();console.log(t);console.log(arr);

      值:t = 1;arr = [2, 3]

      将一个或多个值添加到数组最前面:unshift()

      var arr = [1,2,3];var t = arr.unshift(-1,0);console.log(t);console.log(arr);
    
      t = 5
    
      arr =[-1, 0, 1, 2, 3]

      删除最后一个索引值:pop()

      var arr = [1,2,3];var t = arr.pop();console.log(t);console.log(arr);
    
      t = 3
    
      arr = [1, 2]

      将一个或个多个值添加到数组最后:push()

      var arr = [1,2,3];var t = arr.push(-1,0);console.log(t);console.log(arr);
    
      t = 5
    
      arr t = [1, 2, 3, -1, 0]

      移除元素:splice(,)

            从指定位置开始,共移除指定长度的值

      var arr = [1,2,3,4,5,6];var t = arr.splice(1,2);console.log(t);console.log(arr);
    
      t = [2, 3]
    
      arr = [1, 4, 5, 6]

      该函数还有一个使用方式就是在删除的位置开始,插入一个或多个元素

      var arr = [1,2,3,4,5,6];var t = arr.splice(1,2,7,8,9);console.log(t);console.log(arr);
    
      t= [2, 3]
    
      arr = [1, 7, 8, 9, 4, 5, 6]

        即:从第三个参数开始,后面以逗号分隔开的,都是要插入的值

      反转值函数:reverse()

      var arr = [1, 7, 8, 9, 4, 5, 6];var t = arr.reverse();console.log(t);console.log(arr);
    
      t = [6, 5, 4, 9, 8, 7, 1]
    
      arr = [6, 5, 4, 9, 8, 7, 1]

      排序函数:sort()

      var arr = [1, 7, 8, 9, 4, 5, 6];var t = arr.sort();console.log(t);console.log(arr);
      t = [1, 4, 5, 6, 7, 8, 9]
      arr = [1, 4, 5, 6, 7, 8, 9]

      字符串连续截取函数:slice(起始索引,结束索引)

                注意:结束索引是索引值,从0开始,而不是共要截取的长度

       var arr = [1, 7, 8, 9, 4, 5, 6];var t = arr.slice(2,6);console.log(t);console.log(arr);
    
       t = [8, 9, 4, 5]
    
       arr = [1, 7, 8, 9, 4, 5, 6]

      这里要注意区分splice(,)和slice()两个函数。 Splic(,)是删除数组元素,而slice()是从原数组中返回要截取的值,但原数组内容不变

    将字符串转换为数组:split(分隔字符串)

              注意:并不是所有的字符串都能转换为数组,在使用splice()时,参数”分隔字符串”一定要正确

      var str = "1,2,3,4,5,6";var t = str.split(",");console.log(t);console.log(str);
    
      t = ["1", "2", "3", "4", "5", "6"]
    
      str = “1,2,3,4,5,6 “

    五类型转换

      做为一种弱类型语言,JavaScript的取值类型非常灵活。

      提前说:下面说的“变量”,并不一定指变量,也同时代指某种数据类型的直接量[直接量:程序中直接使用的数据值,如整数 1、字符串: “str“等]。

    5.1 各种类型的转换方式

      转换为字符串:变量.toString()、String(变量)、变量.join(数组)

      转换为数值类型:parseInt(变量)、parseFloat(变量)、Number(变量)

               转换为日期型:new Date(变量)

               转换为布尔型:Boolean(变量)

               转换为数组:变量.split(“分隔符”)

               上面说的这些转换或许并不严格,有些甚至有些先行条件。如:转换数组那个,首先就要求变量必需是数组。但这些在实际的应用中是非常有效的。

    5.2 转换对应表

      注:对于不能转换的情况,是指不能直接转换。有的是可以通过间接的方式转换的。

    变量

    转换为
    字符串

    转换为
    数值型

    转换为
    布尔型

    转换为
    日期型

    转换为
    数组

    var t = “s;t;r”

    (字符串)

    “s;t;r”

    NaN

    true

       /

     

    str.split(";");

    结果:["s", "t", "r"]

    (只能以;分割)

    var t = 1.1;

    (数值)

    “1.1”

    parseInt(t)

    结果:1

    ParseFloot(t)

    结果:1.1

    Number(t)

    结果:1.1

    非0为true

    当为0时,结果为false

        /     /

    var t = true;

    (布尔值)

    true

    为true时,值为1

    为false时,值为0

    true

        /     /

    var t = new Date()

    (日期时间型)

    hu Jun 12 2014 10:49:33 GMT+0800 (中国标准时间)

    1402541401307

    (得到时间戳)

    true

    hu Jun 12 2014 10:49:33 GMT+0800 (中国标准时间)

        /

    var t = null;

    (Null)

    null

    0

    false

        /     /

    var t = undefined;

    (undefined)

    undefined

    NaN

    false

        /     /

    Var t = function (){this.t = 3;};

    (函数)

    返回整个函数

    function (){this.t = 3;}

    NaN

    true

        /     /

     同时也欢迎大家入群:258387392一起讨论、学习

  • 相关阅读:
    poj 2528 Mayor's posters (线段树+离散化)
    poj 1201 Intervals (差分约束)
    hdu 4109 Instrction Arrangement (差分约束)
    poj 1195 Mobile phones (二维 树状数组)
    poj 2983 Is the Information Reliable? (差分约束)
    树状数组 讲解
    poj 2828 Buy Tickets (线段树)
    hdu 1166 敌兵布阵 (树状数组)
    Ubuntu网络配置
    Button控制窗体变量(开关控制灯的状态)
  • 原文地址:https://www.cnblogs.com/nhsd/p/3783900.html
Copyright © 2011-2022 走看看