zoukankan      html  css  js  c++  java
  • Javascript基础

    Javascript基础

    js也是一门编程语言,是面向对象的编程语言,也是一门弱类型的语言,有自己独特的风格。对代码错误的容忍度比较高,报错的话就说明你触及到它的底线了。

    注释以及引入

    学习一门编程语言,首先要学的就是这门语言的注释

    //这是单行注释
    /*这里可以写多行注释*/
    

    JS的引入方式有两种:

    1. script标签内部书写。
    2. script标签内的src属性引入外部的js文件。

    js的编程语言通常以分号来作为语句结束。

    一般情况下编写js文件的方式有两种

    1. 可以单独开设js文件进行编写,
    2. 可以使用浏览器提供的console进行编写。

    变量

    js的变量定义方式是依靠关键字来实现的,

    1. var:在全局使用这个关键字定义变量,那么该变量就是全局变量,如果在函数体内定义一个与外界相同变量名而未使用var关键字,那么就会出现覆盖的现象;使用var则会将该变量转为局部变量
    2. let:用法和var类似,let声明的变量只在let命令所在的代码块有效,经常用在for循环内部。
    3. 可以不使用关键字直接定义。

    在js这门语言中有常量的概念,是使用const关键字来定义的,一旦定义就不允许进行修改。

    变量的命名规范

    变量的命名规范如下:

    1. 变量名只能是字母、数字、下划线和$符。
    2. 推荐使用驼峰体的命名方式,即每个单词的首字母大写
    3. 不能使用关键字做变量名

    数据类型

    数据类型有:数值类型、字符串类型、布尔值类型和对象类型。

    数值类型(number)

    也就是数字,不同的是在js中没有整数和小数之分,统一称为数值number,但是可以进行类型的转换。

    // 1. 定义数值类型
    var num = 11;
    var num1 = 11.11;
    // 查看类型
    typeof a;  // number
    typeof b;  // number
    
    // 2.类型的转换
    parseInt('111.111')  // 111
    parseInt('11fwfreg')  // 11
    parseFloat('fjfwe1123fuhsa')  // NAN  表示不是一个数字:not a number
    

    字符类型(string)

    // 定义字符串的方式
    var s1 = '这是单引号的字符串'
    var s2 = "这是双引号的字符串"
    
    // 如果要是定义多行的字符串,需要使用到   模板字符串。是反引号定义的(ESC下面的键位)
    var s3 = `
    	江山风景美如画;
    	本想吟诗赠天下。
    `
    
    // 模板字符串还可以实现格式化字符串的操作。主要是使用&{}
    var s4 = `
    	这里是s1 ${s1};这里是s2${s2}.
    `
    // 还可以使用+号进行字符串的拼接
    var s = s1 + s2
    

    字符串的常用方法

    length  返回长度
    
    trim()  去除前后空白
    
    charAt(n)  返回第n个字符
    
    concat(v)  拼接操作,将v添加到字符串之后
    
    indexOf(v)  查找v在字符串中的位置,并返回下标,但是只能找到第一个v,如果存在第二个v则并不能找到
    
    substring(start,stop)  通过开始和结束的下标位置获得字符串的片段。不写默认是字符串本身  
    
    slice()  切片,同substring,但是可以识别-1位置(倒数第二个元素下标)
    
    toLowerCase()  小写
    
    toUpperCase()  大写
    
    split(delimiter,num)  delimiter作为分隔符将字符串切成数组,取出num个元素。不写则取出全部 
    
    

    substring和slice用法较为相似,一般情况下slice的容错率较高一点,推荐使用该方法。

    布尔值(boolean)

    布尔值分为true和false.

    布尔值为false的值为:0, null, undefined, NaN

    null意味着是空,即该变量值的值为空,但是undefined则意味着该变量名只是声明了,但是并未赋值;如果函数的没有返回值的话,那么也是默认为undefined。

    对象Object

    首先要明确,JS是一门面向对象的编程语言,即一切皆对象。

    数组

    数组对象使用[]来定义,可以将一系列变量存放进这个数组中。

    var l = [1,2,3,4,'a','s']
    // 查看数组内部具体的值可以使用下标来看。
    console.log(l[0])  // 输出的结果为1
    
    // 常用方法
    length  数组的长度
    
    push(v)  尾部添加v元素
    
    pop()  尾部元素删除
    
    shift()  删除开头元素
    
    unshift(v)  添加开头元素v
    
    slice(start,stop)  切片操作
    
    reverse()  进行反转,不是进行排序
    
    join(seq)  将数组各元素使用seq进行拼接成字符串
    
    sort()  进行排序
    
    concat()  数组的拼接,可以拼接元素,也可以将亮一个数组内的元素进行拼接
    
    // 三个重要的方法
    /* forEach(函数,数组) 将数组内的元素传递给回调函数。也可以对元素进行处理操作
     他还可以接受两个参数,三个参数,分别返回的是【元素的值,元素值的下标,来源数组】 */
    var l = [1,2,3,4,5]
    
    l.forEach(function(i){console.log(++i);},l)  // 2,3,4,5,6
    
    l.forEach(function(i,idex,arr){console.log(i,index,arr);},l)
    
    
    /* map(函数,数组)  返回一个数组元素调用函数处理后的值的新数组 */
    var l = [1,2,3,4,5]
    l.map(function (i) {return i**2},l)  // [1, 4, 9, 16, 25]
    
    
    /* splice(start,num,[value]) start位置向后数num的元素删除,然后添加value元素(选填)。*/
    var l = [1,2,3,4,5,6,7,8,9]
    l.splice(1,3)  // 从下标为1的元素开始向后删除三个元素
    l.splice(1,2,'a')  // 从下标为1的元素开始向后删除2个元素,且添加a元素在下标为1的位置
    
    

    运算符

    运算符分为算数运算符、比较运算符、逻辑运算符、赋值运算符。

    算数运算符

    算数运算符为:+ - * / % 
    ++ :递增,就是+1的意思
    -- :递减,就是-1的意思
    var i = 1;
    console.log(i++)  // 值为1,先赋值,后加减
    console.log(++i)  // 3, 先加减,后赋值
    // 每当进行一次i++,就相当于进行了一次i=i+1,但是显示的结果是有先后顺序的。但是其本身都是加1的。
    // --的操作和++一样
    

    比较运算符

    比较运算符:	> 	< 	>= 	<= 
    需要注意的是:== ===  != !==
    == : JS是弱类型的语言,==对自动将双方转为同一类型然后进行比较
    1 == '1'  // true
    1 != '1'  // false
    
    ===:此时也会比较双方的数据类型
    1 === '1'  // false
    1 !== '1'  // true
    

    逻辑运算符

    与或非 分别对应的符号是 && || !

    赋值运算符

    赋值运算符为:= += -= /= *=

    流程控制

    主要就是if判断、switch、while、for

    if判断

    // 在流程控制中,()内一般放条件,{}一般放的是执行代码块
    // if-else:		if(条件){执行代码} else {}
    var age = 18;
    if (age < 20) {
    	console.log('你太小了')	
    } else {
        console.log('你太大了')
    }
    
    // if-else-if-else:
    var age = 18;
    if (age < 20) {
    	console.log('你太小了')	
    }else if (age <28) {
            console.log('这个年纪我们可以试试。')
    }else{
        console.log('你年纪太大了。')
    }  
    

    switch

    有时可以用来代替if-else-if-else 语法,通过判断给出的定值,进入不同的case分支。

    var n = 1;
    switch (n) {
        case 1:
            console.log('这是1')
            break
        case 2:
            console.log('这是2')
            break
        default:  
            console.log('如果上面的都不是,那么你就能看到我了')
    }
    

    一般情况下,case都会默认跟一个break ,如果要是没有break ,那么在执行完case事件之后,会继续执行下一个case,直到执行完毕(包括最后的default)。

    while

    var i = 10;
    while (i<10) {
        console.log(i);
        i++;
    }
    

    for

    /* 语法:一般情况下,可使用let来定义变量
    for (定义一个变量;循环次数判断条件;自增) {执行代码}
    */
    for (let i=0;i<10;i++){
        console.log(i)
    }
    

    三元运算

    // 语法: l = 条件 ? 条件成立 : 条件不成立
    var a = 2
    var b = 3
    var c = a<b ? a : b
    

    函数

    在js中定义函数的关键字是使用function。

    具体的语法格式是:function 函数名(参数){函数体代码}

    在函数的调用的时候,可以多传参数,也可以少传参数,都不会报错。

    1. 多传参数:函数不搭理多余的参数。
    2. 少传参数:函数会自动给该参数赋值undefined.

    关键字arguments可以接收到传入该函数的所有参数。

    函数的返回值的关键字是return,如果返回多个值,那么外界只能接受到最后一个返回的值。也就是说JS不接受返回多个值的现象。但是也可以通过数组的方式返回。

    // 箭头函数主要是用来处理简单的业务逻辑。
    var func1 = 形参 => 返回值;
    效果等同于
    var func1 = function(形参) {返回值}
    
    var func2 = (a,b) => a+b;
    
    // 立即执行参数:在定义之后立即运行,不需要调用
    (function(a,b)){
     	return a+b
     }(1,2);
    
    

    函数内部的变量查找顺序和Python的查找顺序是一致的。

    1. 查找顺序是在定义阶段就已经确定好了的。
    2. 先找局部变量再找全局变量

    自定义对象

    创建自定义对象

    自定义对象使用符号{}来定义的,其内部是键值对,各项之间使用逗号分隔。

    // 创建一个自定义对象
    var d = {'name':'tom','gender':'male'}
    
    // 查看对象属性
    d['name']
    d.name
    
    // 使用for循环的话  外界可以获取的是对象的key。
    
    
    // 还可以使用这种方式创建对象。
    var person=new Object();  // 创建一个空的person对象
    person.name = 'tom'  // 添加属性
    person['age'] = 1  
    

    Date对象

    // 创建一个时间对象
    var t =new Date();  // Sat May 16 2020 21:30:40 GMT+0800 (中国标准时间)
    t.toLocalString()  // 转为格式:年/月/日 上午时:分:秒
    
    var t1 = new Date('2020/1/2 3:4:5')
    
    var t2 = new Date(2020,1,2,3,4,5)
    
    //时间对象的具体方法
    getDate()  			获取日
    getDay()			获取星期
    getMonth()			获取月份(0-11)
    getFullYear()		获取完整的年份
    getHours()			获取小时
    getMinutes()		获取分钟
    getSeconds()		获取秒
    getMilliseconds()   获取毫秒
    getTime()			时间戳
    

    json对象

    // js中的序列化化与反序列化
    JSON.stringify()		序列化
    JSON.parse()			反序列化
    
    var j = {'name':'tom','flag':true}
    var jJson = JSON.stringify(j)  // 转成了json格式
    var j1 = JSON.parse(jJson)
    
    

    RegExp对象

    // 如果想使用正则的话 需要首先创建一个正则对象
    var r1 = new RegExp('正则规则')
    var r2 = /正则规则/
    
    r.test('测试字符串')  //判断测试字符串是否符合正则表达,返回true或者false
    
    // 正则对象只匹配一次   如果想匹配多次 那么就需要在方法的正则规则末尾再加一个g,全局匹配
    var r = '字符串'
    r.match(/^a/)  不存在返回null,存在返回['匹配字符串',index:下标,input:'来源		
                                  r',groups:undefined]
    r.match(/^a/g)  查找字符串中符合正则的内容,多个的话返回数组
    r.search(/正则/)  返回符合正则的起始下标,不存在则返回-1、
    r.replace(/正则/g,替换字符)  不带g,只能替换一次,如果只替换一次,也可以使用'匹配内容'
    
    
    神奇点:
    1.test方法在全局模式匹配过后,会将LastIndex留在匹配字符的最后一个下标,待下次查询的时候,会从该下标向下查询。
    2.如果test内什么都不传,那么会默认传的值为undefined,返回的结果都是true.
    
    
    
  • 相关阅读:
    滚轮事件
    键盘事件
    运动(学习)
    事件(没有尽头的待完善)
    js 盒子模型(没写完)
    Number 数字相关的方法, 强制 、隐式类型转换 、进制之间转换
    操作DOM 和 节点
    DOM
    Object 的一些静态方法 、 for-in 循环、Object.keys() 、Object.values()、Object.entries()
    删除字段
  • 原文地址:https://www.cnblogs.com/liqianxin/p/12904062.html
Copyright © 2011-2022 走看看