day5-JavaScript基础语法

一.js简介

有些地方建议手动加;来区别,js自带加;有的地方会坑~

  1. 什么是js
    js是JavaScript的缩写,是web标准中的行为标准。负责网页中变化的部分

  2. 在哪儿写js代码
    a.写标签的事件相关属性中,例如按钮的onclick属性
    b.写在script标签中(将js代码作为script标签的内容)
    注意:script标签理论上可以放在html中的任何位置,但是一般放在head或者body中
    c.写在js文件中,在html中通过script标签将文件导入(src属性值就是要导入的js文件的路径)

  3. js能做什么
    a.在网页的指定位置插入标签
    b.修改网页中标签的内容
    c.修改标签样式

  4. 怎么写js代码
    JavaScript是一门编程语言,和python一样是动态语言也是脚本语言。但是和java没有关系

补充:
window.alert(信息) - js代码,在浏览器上弹出一个对话框。对话框中显示指定的信息

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <!--c.位置3-->
        <!--<script type="text/javascript" src="js/index.js"></script>-->
        <!--b.位置2-->
        <!--<script type="text/javascript">
            //在这儿写js代码
            window.alert('水陆草木之花,可爱者甚蕃~')
        </script>-->
    </head>
    <body>
        <!--a.位置1-->
        <!--<button onclick="window.alert('hello')">点我</button>-->
        <script type="text/javascript">
            arr = ['濯清涟而不妖','中通外直','不蔓不枝','香远益清']
            for (index in arr){
                message = '<h1>'+arr[index]+'</h1>'
                //在网页中添加内容
                document.write(message)
            }
//          for (i = 0;i< 100;i++){
//              document.write('<h1>我是标题</h1>')
//          }
        </script>
        
        <!--b.修改标签内容-->
        <p id="p1">我是段落</p>
        <button onclick="document.getElementById('p1').innerHTML='亭亭净植,可远观而不可亵玩焉'">修改内容</button>
        
        <!--c.修改标签的样式-->
        <button onclick="document.getElementById('p1').style='color:red;font-size:30px'">修改样式</button>
        
        <img id="img1" src="img/2.jpg"/>
        <button onclick="document.getElementById('img1').src='img/5.png'">修改图片</button>
        
    </body>
</html>

二.基本语法

<script type="text/javascript">
    //1.控制台输出
    //console.log(输出的内容) - 和print的功能一样
    console.log(100)
    console.log('abc',998)
    
    //2.注释
    //单行注释
    /*
     * 多行注释
     * 多行注释
     */
    
    //3.标识符
    //由字母数字下划线和$组成,数字不能开头
    a = 10
    a20 = 100
    a_10 = 200
    $12s = 998
//  9gg = 100 //Uncaught SyntaxError: 
//  as^ = 200//Uncaught SyntaxError:
    
    //4.行与缩进
    //从语法角度,js代码怎么换行和缩进都无所谓。js中通过{}来确定代码块,
    
    //5.常见的数据类型:数字,布尔,字符串,数组,对象,函数
    /* a.数字(Number) - 包含所有的数字,包括整数和小数。例如:100,-3.14,12.5,3e3
     *                支持科学计数法,不支持虚数
     * b.布尔(Boolean) - 只有两个值ture和false。这两个值是关键字;分别代表'真'和'假'
     * c.字符串(String) - 使用单引号或者双引号引起来的字符集,'abc',"ddf"
     * d.数组(Array) - 相当于python中的列表,[12,'ggg',true]
     * e.对象(Object) - 相当于python中的字典和对象,{}
     * f.函数(Function) - 相当于python中的函数
     * 
     */
    console.log('予谓菊,花之隐逸者也',"牡丹,花之富贵者也",3e3)
    
    obj1 = {name:'ddf',age:10}
    console.log(obj1['name'],obj1.name)
    
    //声明函数
    function eat(food){
        console.log('吃'+food)
    }
    eat('面条')
    
    
    
</script>


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>基本语法</title>
    </head>
    <body>
    </body>
</html>

三.变量

<script type="text/javascript">
    //1.变量的声明
    /*语法1:变量名 = 值
     * 变量名 - 标识符,不能是关键字;
     *          驼峰式命名(第一个单词首字母小写,后面每个单词首字母大写);见名知义
     * 
     * 语法2:var 变量名 = 值或var  变量名
     * var - 声明变量的关键字
     * 
     * 区别:声明的时候加var,变量可以不用赋值,默认是undefined;不加var就必须赋值,否则报错
     * 
     * 补充:js中两个特殊的值 - undefined(没有,空)和null(清空)
     */
    name = 'ddf'
    console.log(name)
    arr1 = [12,78,45]
    console.log(arr1[10])
    var age = 10
    var sex//通过var声明变量的时候如果不赋值,默认是undefined
    console.log(age,sex)
    
    //重新给变量赋值
    name = 'cyy'
    age = 18
    sex = '男'
    console.log(name,age,sex)
    
    //同时声明多个变量,赋一样的值
    a1= a2 = a3 =10
    console.log(a1,a2,a3)
    
    //同时声明多个变量,赋不同的值
    var b1=1,b2=2,b3=3,b4
    console.log(b1,b2,b3,b4)
    
        
</script>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

四.运算符

<script type="text/javascript">
    //1.数学运算符:+、-、*、/、%、++、--
    /* 前四个运算符和python一模一样
     * 
     * ++,--都是单目运算符,使用方式:变量++/--,++/--变量
     * a.++ - 自加1运算;让变量本身的值加1
     * b.-- - 自减1运算;让变量本身的值减1
     */
    num = 10
    num++
    console.log(num) //11
    ++num
    console.log(num) //12
    num--
    console.log(num) //11
    --num
    console.log(num) //10
    
    //坑:用一个变量单独使用++/--的时候,++/--放前面和放后面效果一样;
    //   如果是使用++/--运算的结果给另个变量赋值;
    //   ++/--放前面先自加/自减再赋值;++/--放后面是先赋值再自加/自减
    num2 = 10
    num = ++num2 //相当于:num2 += 1;num = num2
    console.log(num,num2) // 11,11
    
    num2 = 10
    num = num2++ //相当于:num = num2;num2 += 1
    console.log(num,num2) // 10,11
    
    
    //2.比较运算符:<,>,==,!=,>=,<=,===,!==
    /* 结果是布尔值
     * 比较大小的和python一样
     * a. ==:判断值是否相等(相等)
     * b.===:判断值和类型是否相等(完全相等),相当于python中的==,!==相当于python中的不等
     */
    console.log(5 == 5) //true
    console.log(5 == '5') //true
    console.log(5 != 5) //false
    console.log(5 != '5') //false
    
    
    console.log(5 === 5) //true
    console.log(5 === '5') //false
    console.log(5 !== 5) //false
    console.log(5 !== '5') //true
    
    //3.逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)
    //运算规则和使用方式和python的逻辑运算一摸一样
    console.log('==============')
    console.log(true && true) //true
    console.log(true && false)//false
    console.log(false || true) //true
    console.log(false || false)//false
    console.log(!true)//false
    
    //4.赋值运算符:=,+=,-=,*=,/=,%=
    //和python一样
    
    //5.三目运算符 - ?:
    //语法:
    //条件语句?值1:值2 - 判断条件语句的值是否为true,为true整个表达式的结果是值1,否则是值2
    age = 12
    is_man = age>=18?'成人':'未成年'
    console.log(is_man)
    
    //6.运算顺序
    //数学>比较>逻辑>赋值
    //如果有括号,先算括号里面的
    
    
</script>



<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

五.分支结构

<script type="text/javascript">
    //js中的分之结构有两种:if和switch
    /*
     * 1.if语句
     * a.if
     * if(条件语句){
     *  满足条件会执行的代码
     * }
     * b.if-else
     * if(条件语句){
     *  代码段1
     * }
     * else{
     *  代码段2
     * }
     * c.if - else if - else 
     * if(条件语句){
     *  代码段1
     * }
     * else if(条件语句2){
     *  代码段2
     * }
     * else if(条件语句3){
     *  代码段3
     * }
     * else{
     *  代码段4
     * }
     * 执行过程和python一模一样
     * 
     * 
     */
    num = 10
    if(num % 2){
        console.log('奇数')
    }
    else{
        console.log('偶数')
    }
    
    age = 90
    if(age<18){
        console.log('未成年')
    }
    else if(age<60){
        console.log('成年')
    }
    else{
        console.log('老年')
    }
    
    /*
     * 2.switch语句
     * a.结构:
     * switch(表达式){
     *  case 值1:代码段1
     *  case 值2:代码段2
     *  case 值3:代码段3
     *  ...
     *  default:代码段4
     * }
     * b.执行过程:
     * 使用表达式的值依次和后面每个case后面的值进行比较,看是否相等。
     * 找到第一个和表达式的值相等的case,将这个case作为入口,依次执行后面所有的代码,
     * 直到执行完成或者遇到break为止。如果每个case的值都和表达式的值不相等,
     * 就执行default后面的代码
     * 
     * 注意:case后面必须是一个有结果的表达式
     * 
     */
    a = 1
    switch(a){
        case 5:
            console.log('表达式1')
        case 6:
            console.log('表达式2')
        case 7:
            console.log('表达式3')
        case 10:
            console.log('表达式4')
        case 11:
            console.log('表达式5')
            break
        default:
            console.log('表达式6')
    }
    
    //练习:用一个变量保存10分制的成绩,根据成绩打印情况:
    //0~5不及格 6及格 7-8良好 9-10优秀
    score = 8
    switch(score){
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            console.log('不及格')
            break
        case 6:
            console.log('及格')
            break
        case 7: 
        case 8:
            console.log('良好')
            break
        default:
            console.log('优秀')
    }
    
</script>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

六.循环结构

<script type="text/javascript">
    //js中有for循环和while循环两种
    //1.for循环
    /*
     * a.for-in
     * 结构:
     * for(变量 in 序列){
     *  循环体
     * }
     * 执行过程和python一样,但是变量取到的不是元素,而是下标/key(属性名)
     * 序列 - 字符串,数组,对象
     */
    str1 = 'abc'
    for(x in str1){
        console.log('====')
        console.log(x,str1[x])
    }
    
    arr1 = [1,'aaa',true,998]
    for(index in arr1){
        console.log(index,arr1[index])
    }
    
    person1 = {name:'小明',age:18,sex:'男'}
    for(x in person1){
        //typeof() - 获取值的类型
        console.log(x,typeof(x))
        console.log(person1[x])
    }
    
    /*
     * b.c的for循环
     * 结构:
     * for(表达式1;表达式2;表达式3){
     *  循环体
     * }
     * 执行过程:先执行表达式1;然后判断表达式2的值是否为true,如果为true就执行循环体,
     * 执行完循环体再执行表达式3;然后再判断表达式2是否为true,如果为true就执行循环体,
     * 执行完循环体再执行表达式3;...依次类推,直到表达式2的结果为false为止(循环结束)
     * 
     * 
     * 表达式1
     * while(表达式2){
     *  循环体
     * 表达式3
     * }
     * 
     * 表达式1
     * for(;表达式2;){
     *  循环体
     * 表达式3
     * }
     * 
     */
    for (num=1,sum1=0;num<=100;num++) {
        sum1 += num
    }
    console.log(sum1)
    
    //2.while循环
    /*
     * a.while循环
     * while(条件语句){
     *  循环体
     * }
     * 执行过程和python一摸一样
     * 
     * b.do-while循环
     * do{
     *  循环体
     * }while(条件语句)
     * 区别:do-while的循环体至少会执行一次
     */
    //1+2+3+...+100(do-while)
    num=1
    sum=0
    do{
        sum +=num
        num++
    }while(num<101)
    console.log(sum)
    
    
</script>



<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

七.函数

<script type="text/javascript" >
    //1.函数的声明
    /*
     * function 函数名(参数列表){
     *  函数体
     * }
     * js中的函数除了声明的关键字不一样,其他的都一样
     */
    //参数可以设置默认值,也可以通过关键字参数来调用函数
    function sum(num1,num2=3){
        console.log('求两个数的和')
        return num1+num2
    }
    //2,函数的调用
    /*
     * 函数名(实参列表)
     */
    console.log(sum(10,20))
    console.log(sum(17))
    console.log(sum(num1=100,num2=200))
    
    //js中所有的函数都有返回值,默认是undefind
    function func1(){
        console.log('我是js函数')
    }
    re = func1()
    console.log(re,typeof(re))
    
    //3.匿名函数(函数的字面量)
    /*
     * 函数名 = function(参数列表){函数体}
     */
    func2 = function(a,b){
        console.log(a,b)
        return a*b
    }
    console.log(func2(10,20))
    
    funcs_arr = [func1,function(a){console.log(a)}]
    funcs_arr[0]()
    funcs_arr[1]('abc')
    
    
    //4.变量的作用域
    /*
     * a.全局变量:只要声明在函数外面的变量就是全局变量;在函数中以'变量名=值'的形式声明的变量也是全局的
     * b.局部变量:以var关键字声明在函数中的变量,才是局部变量
     * 
     * 
     */
    var1 = 1000//这是一个全局变量
    var var2 = 'abc'//这是一个全局变量
    
    for(xxx in 'hello'){
        
    }
    
    
    function abc(){
        var var4 =222 //这个是局部变量
        var3 = 111 //这是一个全局变量
        console.log(var1,var2,xxx)
    }
    abc()
    console.log(var3)
</script>


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>
</html>

八.字符串

<script type="text/javascript">
    //1.字符串字面量
    /*
     * a.使用双引号或者单引号括起来的字符集
     * b.除了普通字符以外还可以是转义字符:\n,\t,\\,\',\"
     * c.\u4位16进制值对应的Unicode编码,\u4e00
     */
    str1 = 'abc\n123'
    str2 = "abc\"123"
    str3 = "abc\u4e01"
    console.log(str1)
    console.log(str2)
    console.log(str3)
    
    //2.获取字符
    /*
     * 字符串[下标] - 获取单个字符
     * 下标 -范围是0~长度-1;下标如果越界取到的值是undefined
     * js中没有切片方法
     */
    str1 = "hello js"
    console.log(str1[1])
    
    //3.相关运算: +
    /*
     * NaN - js中一个特殊的值,类似undefined、null,用来表示一个不存在的数值
     * 字符串+数据 - 支持字符串和其他任何数据相加,是将其他数据全部转换成字符串,然后再去拼接
     * 
     */
    str2 = 'abc'+123+true+[1,'ddf',666]
    console.log(str2)
    
    //补充:js中数据类型转换:类型名()
    num_str = String(123)
    str_num = Number('a23.45')
    arr_str = String([1,true,'ddf'])
    console.log(num_str,str_num,typeof(num_str),arr_str)
    
    //4.字符串长度 - String 对象属性
    console.log('hello world'.length)
    
    str3 = 'abc'//str3是String类型
    str4 = new String('abc')//object
    console.log(str3==str4,str3===str4)
    
    console.log(str3[1],str4[1])
    
    //5.字符串相关方法 String 对象方法(见菜鸟教程:http://www.runoob.com/js/js-strings.html)

    str1 = 'ddf666f'    
    //charAt()  返回指定索引位置的字符
    console.log(str1.charAt(2))//f
    
    //charCodeAt()  返回指定索引位置字符的 Unicode 值
    console.log(str1.charCodeAt(2))//102
    
    //fromCharCode()    将 Unicode 转换为字符串
    console.log(String.fromCharCode(97))//a
    
    //concat()  连接两个或多个字符串,返回连接后的字符串
    console.log(str1.concat('cyy'))//ddf666fcyy
    
    //indexOf() 返回字符串中检索指定字符第一次出现的位置
    console.log(str1.indexOf('f'))//2
    
    //lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置
    console.log(str1.lastIndexOf('f'))//6
    
    /*
     * match()  找到一个或多个正则表达式的匹配
     * match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。
     * 这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
     * 如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。
     * 如果没有找到任何匹配的文本, match() 将返回 null。
     * 否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。
     */
    console.log('abcd12abc23hhh123'.match(/\d+/g))//(3) ["12", "23", "123"]
    
    //replace(searchvalue,newvalue) 替换与正则表达式匹配的子串
    console.log('abcd12abc23hhh123'.replace(/\d+/g,'*'))//abcd*abc*hhh*
    
    /*
     * search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
     * 如果没有找到任何匹配的子串,则返回 null。
     */
    console.log('abcd12abc23hhh123'.match(/\d+/g))//(3) ["12", "23", "123"]
    console.log('ddfnbbb'.match(/\d+/g))//null
    
    //slice(start,end) - 提取字符串的片断,并在新的字符串中返回被提取的部分
    //start 必须. 要抽取的片断的起始下标。    
    console.log('ddf666nb'.slice(3))//666nb
    
    //split(separator,limit) - 把字符串分割为字符串数组。
    //separator 可选。字符串或正则表达式,从该参数指定的地方分割 string Object.
    console.log('abcd12abc23hhh123d'.split(/\d+/))//(4) ["abcd", "abc", "hhh", "d"]
    
    //toLowerCase() 把字符串转换为小写。
    console.log('DDF666nb'.toLowerCase())//ddf666nb
    
    //toUpperCase() 把字符串转换为大写。
    console.log('ddf666nb'.toUpperCase())//DDF666NB
    
    //trim()    去除字符串两边的空白
    console.log('  ddf666nb  '.trim())//ddf666nb
    
    //substr()  从起始索引号提取字符串中指定数目的字符。
    console.log('ddf666nb'.substr(-1))//b
    console.log('ddf666nb'.substr(4))//66nb
    
    //substring()   提取字符串中两个指定的索引号之间的字符。    
    console.log('ddf666nb'.substring(1,7))//df666n
    
    //6.js中的数组只需要关注:a.怎么获取数组中的元素 b.数组对应的方法 c.元素可以是任何类型
    arr = [1, 'abc', true]  // arr = {0: 1, 1: 'abc', 2: true}
    console.log(arr)
    nums = [1, 34, 67, 2, 344]
    new_nums = nums.sort(function(a,b) {return b-a})
    console.log(new_nums)
    
    
</script>

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