Day22 js基础

1 js简介

  • 什么是js
    • js是JavaScript的缩写,是一门唯一的用来控制网页内容的脚本语言;
    • 是web标准中的行为标准-用来控制网页内容的变化
  • .js写在什么位置
    • 内联 - 将js代码写在标签的事件相关属性中,例如:onclick属性
    • 内部 - 将js代码写在script标签中(既可以放在head标签中也可以放在body标签)
    • 外部 - 将js代码写在js文件中, 然后通过script标签导入
  • js能做什么事情
    • 修改标签内容
    • 修改标签属性
    • 修改标签样式
    • 添加内容
  • 怎么写js代码?
    • js语法
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        
        <!--1.内联js-->
        <button onclick="alert('内联js')">按钮</button>
        
        <!--2.内部js-->
        <!--<script type="text/javascript"> 
            //弹出警告框
            alert('内部js')
        </script>-->
        <!--3.外部js-->
        <!--<script type="text/javascript" src="js/index.js"></script>-->
        
        <!--修改标签内容-->
        <p id="p1">我是段落</p>
        <button onclick="document.getElementById('p1').innerText = 'hello js'">修改内容</button>
        <br /><br />
        
        <!--修改标签属性-->
        <img src="img/luffy.jpg" id="img1"/>
        <button onclick="document.getElementById('img1').src = 'img/luffy1.png'">修改图片</button>
        <br /><br />
        
        <!--修改标签样式-->
        <p id="p2">我是一段文字</p>
        <button onclick="document.getElementById('p2').style='color:red;font-size:25px;'">修改样式</button>
        
        <!--网页中添加内容-->
        <script type="text/javascript">
            for(x=1;x<=10;x++){
                document.write('<h1>我是标题'+x+'</h1>')
            }
        </script>
    </body> 
</html>

2 js 语法基础

2.1 注释(和C语言注释一样)

//单行注释:在注释文字前加//
/*
多行注释1
多行注释2
*/

2.2 标识符

  • 由字母、数字、下划线和$符组成,数字不能开头。
  • 注意:$不轻易使用,在JQ有特殊的意义
num = 23
_num = 100

2.3 关键字

//for、if、var、while、func、true、false等....

2.4数据类型

  • 类型名首字母都是大写的 js有以下数据类型 Number(数字)、String(字符串)、Boolean(布尔)、Array(数组)、Object(对象)
    • Number - 包含所有的数字(包括整数和小数),例如: 100, 0.23, -23, 2e5
    • String - 用双引号或者单引号引起来的字符集, 支持转义字符和编码字符
    • Boolean - 只有true和false两个值,分别代表真和假
    • Array - 相当于python中的列表, 用中括号括起来的多个元素。[12, 'abc', true, [1, 2, 3]]
    • Object - 类似python中字典和对象的结合
  • typeof函数 查看数据类型
  • 类型名(数据) - 类型转换
    • parseFloat(数据) - 将数据转换成浮点数
    • parseInt(数据) - 将数据转换成整数 数据类型不变 js里没整除,可以用parseInt实现
  • 语句
    • 一行一般情况下只写一条语句,语句结束后可以有分号也可以没有;如果一行有多条语句,语句之间必须有分号
    • 缩进无要求
    • 大小写敏感
<script type="text/javascript">
    //转换类型
    result = String(100)
    console.log('=====:',result, typeof(result))
    
    result = parseFloat('12.34')
    console.log('=====:',result, typeof(result))
    
    result = parseInt('12.34')
    console.log('=====:',result, typeof(result))
    
    //typeof(数据) - 获取数据对应的类型
    console.log(2e5)    //在控制台打印,相当于python的print
    console.log(typeof(0.12))  
    console.log(typeof(120)) 
    str1 = 'hello'
    str2 = "Hello\t你好\u4e00"
    console.log(str2)
    
    arr1 = [10, 'abc', false, [1, 2, 3]]
    console.log(arr1, arr1[1])
    
    obj1 = {
        'name':'小明',
        'age': 18,
        'sex':'女'
    }
    console.log(obj1, typeof(obj1))
    console.log(obj1['name'], obj1.name)
    
    obj2 = {
        name:'小明',
        age:18,
        sex:'男'
    }
    console.log(obj2, typeof(obj2))
    
    //语句
    num1 = 100
num2 = 200
          num3 = 300
          
    num = 1000
    NUM = 2000
    console.log(num, NUM)
    
</script>

2.5变量

声明变量的语法

  • 语法1:
    • 变量名 = 值
  • 语法2:
    • var 变量名 / var 变量名 = 值
  • 说明
    • 变量名 - 标识符、不能是关键字; 采用驼峰式命名
    • 声明变量如果没有给变量赋值(语法2才支持),变量的默认值是undefined
<script type="text/javascript">
    
    num = 100 //必须赋值
    console.log(num)
    
    var num2 //不赋值是undefined
    console.log(num2)
    
    studentName = '小明'
    
    //同时声明多个变量,赋相同的值
    a = b = c = 10
    console.log(a,b,c)
    
    //同时声明多个变量,赋不同的值
    var a1, b1=10, c1=30
    console.log(a1, b1, c1)  
    
</script>

2.6 运算符

js支持数学运算符、比较运算符、逻辑运算符、赋值运算符、(位运算)

<script type="text/javascript">
    //1.数学运算符:+, -, *, /, %, ++,--
    //+, -, *, /, %和python一样
    console.log(10+20, 10-20, 10*20, 10/20, 10%20)
    //1)自加1运算: 变量++, ++变量
    num = 10
    num++       //num += 1
    console.log(num)    // 11
    ++num
    console.log(num)    // 12
    
    //2)自减1运算: 变量--, --变量
    num = 10
    num--
    console.log(num)
    --num
    console.log(num)
    
    //3)自加自减的坑
    num = 10
    num2 = num++       // num2 = num; num+=1
    console.log(num2)
    
    num = 10
    num2 = ++num      // num+=1; num2=num
    console.log(num2)
    
    //2.比较运算符: >,<,==,!=,>=,<=, ===, !==
    // 比较大小和python一样
    
    // == : 判断值是否相等(不管类型)
    // === : 同时判断值和类型是否相等(python中的==)
    console.log(5 == '5')   // true
    console.log(5 === '5')  // false
    
    console.log(5 != '5')  //false
    console.log(5 !== '5')  // true
    
    // 支持表示范围的连续写法
    num = 10
    reslut = 0 < num <100
    console.log(reslut)
    
    //3.逻辑运算:&&(逻辑与运算)、||(逻辑或运算)、!(逻辑非运算)
    //和python中的and,or,not功能一样
    console.log(true && true, true && false)
    console.log(true || true, true || false)
    console.log(!true)
    
    //4.赋值运算符: =, +=, -=, *=, /=, %=
    //和python一样
    
    //5.复合运算和python一样
    
    //6.三目运算符 -    表达式?值1:值2
    //判断表达式的值是否为true,如果为true整个运算的结果是值1,否则是值2
    age = 16
    reslut = age>18?'成年':'未成年'
    console.log(reslut)
</script>

2.7 分之结构

js有if和switch两种分之结构

2.7.1 if分之

  • 结构1: if
    if(条件语句){
    满足条件执行的代码块
    }
  • 结构2: if-else
    if(条件语句){
    满足条件执行的代码块
    }else{
    不满足条件执行的代码块
    }
  • 结构3:if-elif...else
    if(条件语句1){
    满足条件1执行的代码块
    }else if(条件语句2){
    满足条件2执行的代码块
    }

2.7.2 switch

  • 语法:
    switch(表达式){
    case 值1:
    代码块1
    case 值2:
    代码块2
    case 值3:
    代码块3
    ...
    default:
    代码块N}
  • 执行过程
    先计算表达式的结果,然后让这个结果按顺序从前往后和每个case后面的值进行比较。
    如果哪个case后面的值和表达式的结果相等,就将这个case作为入口,依次后面所有代码块,
    直到执行完最后一个代码块或者遇到break为止。
    如果每个case后面的值都和表达式的结果不相等,直接执行default后面的代码块(default可以不写)
<script type="text/javascript">
    
    switch(2){
        case 1:
            console.log('表达式1')
        case 15:
            console.log('表达式15')
        case 10:
            console.log('表达式10')
            
        case 8:
            console.log('表达式8')
            
        default:
            console.log('表达式d')
    }
    
    
    grade = 2
    switch(grade){
        case 0:
            console.log('不及格')
            break
        case 1:
        case 2:
        case 3:
            console.log('及格')
            break
        case 4:
        case 5:
            console.log('优秀')
            break
    }
</script>

2.8 循环结构

js中循环分为for循环和while循环

2.8.1 for循环

  • for-in循环
    for(变量 in 序列){
    循环体}
    让变量依次获取序列中元素的下标(下标/属性名),一个一个取,取完为止,每取一个值执行一次循环体
  • c中的for循环
    • for(表达式1;表达式2;表达式3){
      循环体 }
    • 执行过程:
      • 先执行表达式1,再判断表达式2的值是否为true;如果为true执行循环体,执行完循环体再执行表达式3;
      • 再判断表达式2是否为true,如果为true执行循环体,执行完循环体再执行表达式3;
      • 再判断表达式2是否为true,如果为true执行循环体,执行完循环体再执行表达式3;
      • 依此类推,直到表达式2的结果为false,循环结束
    • 相当于python中的以下结构:
      表达式1
      while 表达式2:
      循环体
      表达式3

2.8.2 while循环

  • while循环
    while(条件语句){
    循环体}
    执行过程和python一样
  • do-while循环
    do{
    循环体
    }while(条件语句)
    执行过程: 执行循环体,判断条件语句是否为true,为true再执行循环体,执行完循环体又判断条件语句是否为true,以此类推,直到条件语句为false循环结束
<script type="text/javascript">

    str1  = 'abc'
    for(x in str1){
        console.log(x, str1[x])
    }
    
    //2)C中的for循环

    sum1 = 0
    for(num=1;num<=100;num++){
        sum1 += num
    }
    console.log(sum1)
    
    //2.while循环
    
    sum1 = 0
    for(num=1;num<=100;num++){
        sum1 += num
    }
    console.log(sum1)
    
    
    sum1 = 0
    num = 1
    while(num<=100){
        sum1 += num
        num++
    }
    console.log(sum1)
    
    
    sum1 = 0
    num = 1
    for(;num<=100;){
        sum1 += num
        num++
    }
    console.log(sum1)
    
    //练习: 打印所有的水仙花数
    //153 == 1**3+5**3+3**3
    console.log('===========================')
    for (num=100;num<=999;num++) {
        ge = num % 10
        shi = parseInt(num/10)%10
        bai = parseInt(num/100)
        if (ge**3 + shi**3 + bai**3 == num){
            console.log(num)
        }
    }
    
</script>

3 js函数

语法:
function 函数名(参数列表){
函数体}

<script type="text/javascript">
    function sum(num1, num2=20){
        console.log(num1, num2, num1+num2)
    }
    //位置参数有效
    sum(10, 30)
    
    //关键参数不报错,但是顺序无效
    sum(num1=2, num2=4)   // 2  4  6
    sum(num2=9, num1=8)   // 9  8  17
    
    //参数可以设置默认值(有默认值的参数要在后面)
    sum(10)
    
    
    function sum1(num1=10, num2){
        console.log(num1, num2, num1+num2)
    }
    sum1(20)   // 20 undefined NaN(无效数字)

    function sum3(num1, num2){
        
        return num1+num2
    }
    console.log(sum3(23, 45))
    
    //声明函数其实就是声明一个类型是Function的变量
    x = sum3
    console.log(typeof(x))
    console.log(x(90, 9))
    
    /*
     2.匿名函数
     function (参数列表){
        函数体
     }
     */
    func1 = function(x, y){
        console.log(x, y, x+y)
        return x+y
    }
    func1(1, 2)
    
    
    a = function(x, y){
        console.log(x, y, x+y)
        return x+y
        
    }(10, 20)
    console.log(a)   // 30
</script>

4 字符串

<script type="text/javascript">
    //1.字符串
    //单引号或者双引号引起来的字符集,支持转义字符和编码字符
    str1 = 'hello world'
    str2 = 'hello\t\'world\''
    
    //2.获取字符
    //字符串[下标]
    //注意: 1)下标只有正值,没有负的; 2)下标越界不会报错,获取到的值是undefined
    console.log(str1[0])
    
    console.log(str1[-1])
    
    //js中不支持[]对应的切片语法,但是有相应的方法
    
    //3.相关操作
    //1)加法运算
    //支持字符串和任何数据相加, 如果另外一个数据不是字符串就先转换成字符串再进行拼接操作
    console.log('abc'+'hello')  //abchello
    console.log('abc'+123)     // abc123
    
    //2)比较运算: 和python一样
    
    //3)字符串长度: 字符串.length
    console.log(str2.length)
    
    //4.相关方法
    str2 = new String('hello world')
    console.log(str2)
    
    //1)字符串.charCodeAt(下标)
    console.log(str2.charCodeAt(0))
    
    //2)字符串.match(正则表达式),相当于python中的re.match
    re = /\d{3}[a-z]{3}/
    console.log('234abc====='.match(re))
    
    //3)字符串.slice(开始下标,结束下标)
    console.log(str2.slice(0, 3))
</script>
##5 数组
~~~html
<script type="text/javascript">
    //js中的数组相当于python中的列表
    //1.查
    arr1 = [10, 2, 30, 4, 5]
    //1)获取单个元素: 数组[下标]
    console.log(arr1[3])   //4
    console.log(arr1[10])  //undefined
    
    //2)遍历
    for(index in arr1){
        console.log('index:'+index, arr1[index])
    }
    
    //2.增
    console.log('=============增加==================')
    //1)数组.push(元素) - 在数组的最后添加元素
    arr1.push(100)
    console.log(arr1)
    
    //2)数组.splice(下标,0,元素)  - 在指定的下标前插入指定的元素
    //数组.splice(下标,0,元素1,元素2,...)  - 在指定的下标前插入多个元素
    arr1 = [1, 2, 3, 6, 7,8]
    arr1.splice(3,0,4,5)
    console.log(arr1)
    
    //3.删
    console.log('=============删除==================')
    //1)数组.pop()  - 取出数组中的最后一个元素
    re = arr1.pop()
    console.log(arr1, re)
    
    //2)数组.shift() - 取出数组中第一个元素
    re = arr1.shift()
    console.log(arr1, re)
    
    //3)数组.splice(开始删除的下标,删除的个数)
    arr1 = [10, 30, 20, 40]
    arr1.splice(1,2)
    console.log(arr1)
    
    //4.改
    //数组[下标] = 值
    arr1[0] = 200
    console.log(arr1)
    
    //5.排序
    //sort(函数对象) 
    //函数对象 - 函数,有两个参数(代表数组中的两个元素), 返回值代表排序方法
    console.log('=================排序==============')
    nums = [90 ,23, 56, 7, 89, 70]
    //数组元素从大到小排序
    nums.sort(function(a,b){return b-a})
    console.log(nums)
    
    //数组元素从小到大排序
    nums.sort(function(a,b){return a-b})
    console.log(nums)
    
    students = [
        {name:'小明', age:18, score:90},
        {name:'小花', age:20, score:70},
        {name:'小红', age:15, score:78},
        {name:'小李', age:30, score:60}
    ]
    
    //将数组元素按照元素的age属性从下到大排序
//  students.sort(function(a,b){return a.age - b.age})
//  console.log(students)
    
    //将数组元素按照元素的score属性从大到小排序
    students.sort(function(a,b){return b.score - a.score})
    console.log(students)
</script>

6 对象

<script type="text/javascript">
    //1.什么是对象
    //和python类的对象一样,主要由对象属性和对象方法组成
    //2.创建对象
    //1)对象值 
    obj1 = {
        name: '张三',
    }
    console.log(typeof(obj1), obj1)
    
    //2)new 类型()
    obj2 = new Object()
    console.log(typeof(obj2), obj2)
    obj2.name = '小明'
    console.log(obj2)
    
    //3.构造方法 - 一个用来创建对象的函数
    //1)函数名相当于类名,首字母要大写
    //2)函数的功能是通过this添加对象属性和对象方法(这儿的this就相当于self)
    //3)返回值是this
    function Person(name, age, gender='男'){
        
        // 通过new的方式调用, this:Person {} 
        // 直接调用, this: Window
        console.log(this)
        
        //添加对象属性
        this.name = name
        this.age = age
        this.gender = gender
        //添加对象方法
        this.eat = function(food){
            console.log(this.name+'在吃'+food)
        }
        
        return this
    }
    
    //4.使用构造方法创建对象
    //对象 = new 构造方法()
    p1 = new Person('小花', 20, '女')
    p2 = new Person('小明', 35)
    
    //5.通过对象使用对象属性和调用对象方法
    p1.name = '小花花'
    console.log(p1.name, p1['name'])
    
    p1.eat('面条')
    p2.eat('面包')
    
    //6.添加/修改属性
    //对象.属性 = 值
    p1.height = 160
    console.log(p1, p2)
    

    function func1(){
        console.log('普通函数')
        console.log(this)
    }
    
//  func1()
    window.func1()
    num = 100   //  window.num=100
    console.log(num, window.num)
</script>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 8,994评论 0 3
  • 第一章 前端三大语言:HTML(专门编写网页内容)、CSS(编写网页样式)、JS(专门编写网页交互行为) 能简写尽...
    fastwe阅读 909评论 0 0
  • 作者的序言 朋友们,弃疗系列4出来啦,作者还并没有放弃,感觉自己萌萌哒,233。 语句 js程序其实就是一系列可执...
    zhaolion阅读 1,736评论 0 8
  • 1.语句js程序的执行单位为行line,也就是一行一行的执行,一般情况下,每一行就是一个语句。语句(stateme...
    饥人谷_小霾阅读 485评论 0 1
  • JavaScript :简称:js js分三个部分:1. ECMAScript 标准----js的基本的语法2. ...
    猪上山阅读 482评论 0 2