JS学习笔记(一)

目录

一、JS书写位置

1.行内式

2.内嵌式

3.外部式

二、基本语法

1.注释

(1)单行注释://          

(2)多行注释:/**/

2.输入输出语句

(1)prompt弹出输入框

(2)alert弹出警示框

(3)console.log控制台打印输出信息

三、变量

1.变量的声明

2.简单数据类型:

(1)Number(默认值为0)

(2)Boolean(默认值为false)

(3)String(默认值为"")

(4)Undefined(默认值为undefined)

(5)Null(默认值为null)

3.typeof获取变量数据类型

4.数据类型转换

(1)转换为字符串

(2)转换为数字型

(3)转换为布尔型

四、运算符

1.算数运算符:+ - * / %

2.递增符:++ --(前置/后置)

3.比较运算符

4.逻辑运算符

5.赋值运算符:= += -= *= /= %=

6.运算符优先级

五、流程控制与循环(同C)

1.if语句

2.三元表达式

3.switch语句

4.for循环

5.while循环

6.do-while循环

7.continue关键字

8.break关键字

六、数组

1.利用new创建数组

2.利用数组字面量创建数组

3.访问数组元素

4.“数组名.length”访问数组元素的数量

5.新增数组元素

(1)修改length长度

(2)修改索引号(追加)

七、函数

1.声明与调用

(1)利用函数关键字自定义函数(命名函数)

(2)函数表达式(匿名函数)

2.关键字return(返回一个值并中止函数)

3.函数内置属性arguments

八、预解析

1.变量预解析(变量提升)

2.函数预解析(函数提升)

九、对象

1.创建对象

(1)利用字面量创建对象​​​​​​

(2)利用new Object创建对象

(4)new关键字执行过程

2.for in遍历对象(重要)

3.内置对象

(1)Math对象

(2)Date对象

(3)数组对象

(4)字符串对象


一、JS书写位置

1.行内式

<input type="button" value="点我试试" onclick="alert('Hello World')"/>
  • 可以将单行或少量JS代码写在HTML标签的事件属性中(以on开头的属性),如: onclick
  • 注意单双引号的使用:在HTML中我们推荐使用双引号, JS中我们推荐使用单引号
  • 可读性差,在html中编写JS大量代码时,不方便阅读;
  • 引号易错,引号多层嵌套匹配时,非常容易弄混;
  • 特殊情况下使用

2.内嵌式

<script>
    alert('Hello World!');
</script>
  • 通常在<head>标签内书写<script>
  • 可以将多行JS代码写到<script>标签中
  • 内嵌JS是学习时常用的方式

3.外部式

<script src="my.js"></script>
  • 利于HTML页面代码结构化,把大段JS代码独立到HTML页面之外,既美观,也方便文件级别的复用
  • 引用外部JS文件的script标签中间不可以写代码
  • 适合于JS代码量比较大的情况

二、基本语法

1.注释

(1)单行注释://          

(2)多行注释:/**/

2.输入输出语句

(1)prompt弹出输入框

prompt('请输入您的年龄');

(2)alert弹出警示框

alert('欢迎使用该网站');

(3)console.log控制台打印输出信息

console.log('我是程序员才能看到的');

三、变量

1.变量的声明

var age; //声明一个名称为age的variable变量
var a = b = c = 9; //相当于var a = 9; b = 9; c = 9;//后两个是全局变量
  1. JS的变量数据类型是程序在运行过程中,根据等号右边的值来确定的;
  2. JS是动态语言,变量的数据类型是可以变化的;
  3. 不声明变量直接赋值可以使用,该变量为全局变量。

2.简单数据类型:

(1)Number(默认值为0)

  1. 数字型,包含整型值和浮点型值,如21、0.21
  2. 八进制数字以0开头,十六进制数字以0x开头
  3. 最大值:Number.MAX_VALUE
  4. 最小值:Number.MIN_VALUE
  5. 无穷大:Infinity
  6. 无穷小:-Infinity
  7. 非数值:NaN(not a number)
  8. 判断函数isNaN( );

(2)Boolean(默认值为false)

         布尔值类型,如true、false, 等价于1和0

(3)String(默认值为"")

  1. 字符串类型(带引号),如“张三”
  2. 引号嵌套:外双内单或外单内双
  3. 转义符:
    转义符解释说明
    \n换行符
    \\斜杠\
    \'单引号
    \"双引号
    \ttab缩进
    \b空格

  4. 检测获取字符串的长度length
    var str = "my name";
    alert(str.length);
  5. 字符串的拼接+
    var age=18;
    console.log(age+'岁'); //只要有字符串和其他类型相拼接,最终的结果是字符串类型

(4)Undefined(默认值为undefined)

var a; //声明了变量a但是没有给值,此时a = undefined

(5)Null(默认值为null)

var a= null; //声明了变量a为空值,typeof返回的是一个空的对象object

3.typeof获取变量数据类型

var num = 18;
console.log(typeof num); //返回类型number

4.数据类型转换

(1)转换为字符串

  1. 利用+拼接字符串的方法实现转换效果(隐式转换,常用)
  2. toString()
    var num = 10;
    var str = num.toString();
  3. String()强制转换
    var num = 10;
    String(num);

(2)转换为数字型

  1. parselnt(string)函数
  2. parseFloat(string)函数
  3. Number()强制转换
  4. 利用算数运算- * /隐式转换
    var num = ‘123’ – ‘120’; //3

(3)转换为布尔型

Boolean(v);
/*①代表空、否定的值会被转换为false;
②其余值都会被转换为true。*/

四、运算符

1.算数运算符:+ - * / %

2.递增符:++ --(前置/后置)

3.比较运算符

     ==:等于(默认转换数据类型,会把字符串型的数据转换为数字型,18==’18’)

     ===:全等于(包括数值和类型)

     !==:全等于(包括数值和类型)

4.逻辑运算符

     &&:与

     ||:或

     !:非

5.赋值运算符:= += -= *= /= %=

6.运算符优先级

优先级

运算符

顺序

1

小括号

()

2

一元运算符

++  --  !

3

算数运算符

先*  /  %  后+  -

4

关系运算符

>  >=  <  <=

5

相等运算符

==  !=  ===  !==

6

逻辑运算符

先 && 后 ||

7

赋值运算符

=

8

逗号运算符

,

五、流程控制与循环(同C)

1.if语句

2.三元表达式

3.switch语句

4.for循环

5.while循环

6.do-while循环

7.continue关键字

8.break关键字

六、数组

1.利用new创建数组

var arr1 = new Array(); //创建一个新的空数组
var arr2 = new Array(2); //长度为2的数组里面有2个空的数组元素
var arr3 = new Array(2, 3); //等价于[2,3]

2.利用数组字面量创建数组

var arr = []; //创建一个空数组
var arr = [ '1', 2, true ]; //创建一个带初始值的数组

3.访问数组元素

var arr = [ '1',2,true ];
console.log(arr[1]);

4.“数组名.length”访问数组元素的数量

5.新增数组元素

(1)修改length长度

var arr = [ '1',2,true ];
arr.length = 5; //新增两个空元素

(2)修改索引号(追加)

var arr = [ '1',2,true ];
arr[3] = false;

七、函数

1.声明与调用

(1)利用函数关键字自定义函数(命名函数)

function fn() { } //fn是函数名
fn(); //调用

(2)函数表达式(匿名函数)

var fn = function() { } //fn是变量名

2.关键字return(返回一个值并中止函数)

3.函数内置属性arguments

     arguments展示形式是一个伪数组,因此可以进行遍历。伪数组具有以下特点:

  1. 具有length属性
  2. 按索引方式储存数据
  3. 不具有数组的push, pop等方法
function fn() {
    console.log(arguments); //里面存储了所有传递过来的实参
}
fn(1,2,3);

八、预解析

  1. 我们JS引擎运行JS分为两步:预解析、代码执行
  2. 预解析:JS引擎会把JS里面所有的var还有function提升到当前作用域的最前面
  3. 代码执行:按照代码书写的顺序从上往下执行

1.变量预解析(变量提升)

/*把所有的变量声明提升到当前的作用域最前面,不提升赋值操作*/
console.log(num); //undefined
var num = 10;
fun(); //报错
var fun = function() { //注意:fun是一个变量
   console.log(22);
}

2.函数预解析(函数提升)

/*把所有的函数声明提升到当前作用域的最前面,不调用函数*/
fn(); //可以执行
function fn() {
   console.log(22);
}

九、对象

1.创建对象

(1)利用字面量创建对象​​​​​​

var obj = {
    uname: ‘张三’, //键值对格式——属性名:属性值
    age: 18;
    sex:'男',
    sayHi: function() { //方法,相当于一个匿名函数
        console.log(‘hi~’);
    }
}
/*调用对象属性:对象名.属性名 或 对象名['属性名']*/

(2)利用new Object创建对象

var obj = new Object(); //创建了一个空的对象
obj.uname = ‘张三’;
obj.age = ‘18’;
obj.sex = ‘男’;
obj.sayHi = function() {
    console.log(‘hi~’);
}

(3)利用构造函数创造对象

function Star(uname, age, sex) { //构造函数名字首字母要大写
    this.uname = uname; //属性和方法前必须添加this
    this.age = age;
    this.sex = sex;
    this.sing = function (sang) {
           console.log('sang');
    }
}
ldh.sing('冰雨');
var ldh = new Star('刘德华',18,'男'); //调用构造函数必须使用new

(4)new关键字执行过程

  1. new构造函数可以在内存中创建一个空的对象
  2. this就会指向刚才创建的空对象
  3. 执行构造函数里面的代码,给这个空对象添加属性和方法
  4. 返回这个对象(所以构造函数不需要return)

2.for in遍历对象(重要)

var obj = new Object();
for (var k in obj) { //for(变量 in 对象)
    console.log(k); //得到属性名
    console.log(obj[k]); //得到属性值
}

3.内置对象

(1)Math对象

  1. Math.abs( ):绝对值
  2. Math.PI( ):圆周率
  3. Math.floor( ):向下取整
  4. Math.ceil( ):向上取整
  5. Math.round( ):四舍五入,就近取整(3.5结果是4,-3.5结果是-3)
  6. Math.max( )/ Math.min( ):最大值/最小值
  7. Math.random( ):返回一个随机的小数(0≤x<1)

(2)Date对象

  1. Date( )日期对象是一个构造函数,必须使用new来调用创建
    var date = new Date();
  2. 使用Date,如果没有参数,返回当前系统的当前时间
  3. 参数常用的写法:2019,10,01(不推荐)或者 '2019-10-01 8:8:8'
  4. 获取日期指定的部分:

    方法名

    说明

    代码

    getFullYear()

    获取当年

    日期对象.方法()

    getMonth()

    获取当月(0-11

    getDate()

    获取当天日期

    getDay()

    获取星期几(周日06

    getHours()

    获取当前小时

    getMinutes()

    获取当前分钟

    getSeconds()

    获取当前秒钟

  5. 获得Date总的毫秒数

        ①通过valueOf( ) 或 getTime( )

var date = new Date( );
/*返回现在时间距离1970.1.1总的毫秒数*/
console.log(date.valueOf( ));
console.log(date.getTime( ));

        ②简单写法(最常用的写法)

var date = + new Date(); //+ new Date()返回的就是总的毫秒数

        ③H5新增的 获得总的毫秒数

var date = new Date();
console.log(Date.now());

        ④项目:倒计时

<script>
    /*倒计时效果
    1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时,但是不能拿着时分秒相减,比如05分减去25分,结果会是负数的。
    2.用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
    3.把剩余时间总的毫秒数转换为天、时、分、秒(时间戳转换为时分秒)
    转换公式如下:
    d = parseInt(总秒数/ 60/60 /24);//计算天数
    h = parseInt(总秒数/ 60/60 %24);//计算小时
    m = parseInt(总秒数/60 %60 );//计算分数
    s = parseInt(总秒数%60); //计算当前秒数
    */
    function countDown(time) {
        var nowTime = +new Date(); //返回的是当前时间总的毫秒數
        var inputTime = +new Date(time); //返回的是用户输入时间总的毫秒数
        var times = (inputTime - nowTime) / 1000; //times是剩余时间总的秒数
        var d = parseInt(times / 60 / 60 / 24);//天
        d = d < 10 ? '0' + d : d;
        var h = parseInt(times / 60 / 60 % 24);//时
        h = h < 10 ? '0' + h : h;
        var m = parseInt(times / 60 % 60);//分
        m = m < 10 ? '0' + m : m;
        var s = parseInt(times % 60); //秒
        s = s < 10 ? '0' + s : s;
        return d + '天' + h + '时' + m + '分' + s + '秒';
    }
    console.log(countDown('2022-4-29 10:00:00'));
</script>

(3)数组对象

  1. 创建:见上方
  2. 检测是否为数组:instanceof或isArray( )
    var arr =[];
    var obj = {};
    /*通过运算符instanceof检测*/
    console.log(arr instanceof Array); //返回true
    console.log(obj instanceof Array); //返回false
    /*Array.isArray(参数)检测,这是H5新增的方法,ie9以上版本支持*/
    console.log(Array.isArray(arr)); //返回true
    console.log(Array.isArray(obj)); //返回false
    
  3. 添加数组元素

    方法名

    说明

    返回值

    push(参数1...)

    末尾添加一个或多个元素

    新的

    长度

    unshift(参数1…)

    向数组的开头添加一个或更多元素

    pop()

    删除数组最后一个元素,把数组长度减1

    删除元

    素的值

    shift()

    删除数组的第一个元素,数组长度减1

  4. 翻转数组
    var arr = [3,5,4];
    arr.reverse();
  5. 数组排序
    var arr1 = [3, 5, 4];
    arr1.sort(); //适用于一位数
    var arr2 = [13, 4, 77, 1, 7];
    arr2.sort(function (a, b) {
        return a - b; //升序的顺序排列
        //return b - a; //降序的顺序排列
    })
  6. 数组索引方法

    方法名

    说明

    返回值

    indexOf()

    在数组中查找给定元素的第一个索引

    如果存在返回索引号,

    如果不存在则返回-1

    lastIndexOf()

    在数组中的最后一个的索引

    //indexOf(数组元素)作用 就是返回该数组元素的索引号
    //它只返回第一个满足条件的索引号
    //它如果在该数组里面找不到元素,则返回的是-1
    var arr = ['red', 'green', 'blue', 'pink', 'blue'];
    console.log(arr.indexOf('blue'));//返回2
    console.log(arr.lastIndexOf('blue'));//返回4
  7. 案例:数组去重
    function unique(arr) {
        var newArr = [];
        for (var i = 0; i < arr.length; i++) { //遍历旧数组,然后拿着旧数组元素去查询新数组
            if (newArr.indexOf(arr[i]) == -1) //如果该元素在新数组里面没有出现过,我们就添加
                newArr.push(arr[i]);
        }
        return newArr;
    }
  8. 将数组转换为字符串
    // 1. toString() 将我们的数组转换为字符串
    var arr = [1, 2, 3];
    console.log(arr.toString()); // 1,2,3
    // 2. join(分隔符)
    var arr1 = ['green', 'blue', 'pink'];
    console.log(arr1.join()); //green,blue,pink
    console.log(arr1.join('-')); //green-blue-pink
    console.log(arr1.join('&')); //green&blue&pink
  9. 数组的连接、截取和删除

    方法名

    说明

    返回值

    concat()

    连接两个或多个数组,不影响原数组

    返回一个新的数组

    slice()

    数组截取slice(begin, end)

    返回被截取项目的新数组

    splice()

    数组删除,会影响原数组

    splice(第几个开始,要删除个数)

    返回被删除项目的新数组

(4)字符串对象

  1. 字符串的不可变:指的是字符串里面的值不可变。虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一一个内存空间。
  2. 根据字符串返回位置

    方法名

    说明

    indexOf(要查找的字符,开始的位置)

    返回指定内容在元字符串中的位置,如果找不到就返回-1,开始的位置是index索引号

    lastlndexOf()

    从后往前找,只找第一个匹配的

  3. 根据位置返回字符

    方法名

    说明

    使用

    charAt(index)

    返回指定位置的字符(index字符串的索引号)

    str.charAt(0)

    charCodeAt(index)

    获取指定位置处字符的ASCII(index索引号)

    str.charCodeAt(0)

    str[index]

    获取指定位置处字符

    HTML5IE8+支持

    charAt()等效

  4. 字符串的连接和截取

    方法名

    说明

    concat(str1,str2,str3...)

    连接两个或多个字符串,等效于++更常用)

    substr(start,length)

    start位置开始(索引号),截取length个字符

    slice(start, end)

    start位置开始,截取到end位置,end取不到 (他们俩都是索引号)

    substring(start, end)

    start位置开始,截取到end位置,end取不到 基本和slice相同,但是不接受负值

  5. 替换字符replace
    //替换字符replace('被替换的字符','替换为的字符')
    //它只会替换第一个字符
    var str = 'andyandy';
    console.log(str.replace('a', 'b'));//bndyandy
    //有一个字符串'abcoefoxyozzopp' 要求把里面所有的0替换为*
    var str1 = 'abcoefoxyozzopp';
    while (str1.indexOf('o') !== -1) {
        str1 = str1.replace('o', '*');
    }
    console.log(str1);//abc*ef*xy*zz*pp
    
  6. 字符转换为数组
    //字符转换为数组 split('分隔符')
    var str1 = 'red,pink,blue';
    console.log(str1.split(','));
    var str2 = 'red&pink&blue';
    console.log(str2.split('&'));
    
  7. 大小写转换
    toUpperCase(str); //转换大写
    toLowerCase(str); //转换小写
  8. 案例
    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>字符串操作案例</title>
        <script>
            /*
            给定一个字符串,如: "abasdffgghjkgfdssss3444343” , 问题如下:
            1、字符串的长度
            2、取出指定位置的字符,如: 0,3,5,9等
            3、查找指定字符是否在以 上字符串中存在,如:i,c,b等
            4、替换指定的字符,如: g替换为22,ss替换为b等操作方法
            5、截取指定开始位置到结束位置的字符串,如:取得1 -5的字符串
            6、找出以上字符串中出现次数最多的字符和出现的次数
            */
            var str = 'abaasdffggghhjjkkgfddsssss3444343';
            //1、字符串的长度
            console.log(str.length);
            //2、取出指定位置的字符,如: 0,3,5,9等
            console.log(str.charAt(0) + '\b' + str.charAt(3) + '\b' + str.charAt(5) + '\b' + str.charAt(9));
            //3、查找指定字符是否在以上字符串中存在,如:i,c,b等
            function exitLetter(str, letter) {
                if (str.indexOf(letter) !== -1)
                    console.log(letter + '存在');
                else
                    console.log(letter + '不存在');
            }
            exitLetter(str, 'i');
            exitLetter(str, 'c');
            exitLetter(str, 'b');
            //4、替换指定的字符,如: g替换为22,ss替换为b等操作方法
            console.log(str.replace('g', '22'));
            console.log(str.replace('ss', 'b'));
            //5、截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
            console.log(str.substr(1, 5));
            //6、找出以上字符串中出现次数最多的字符和出现的次数
            var o = {};
            for (var i = 0; i < str.length; i++) {
                var chars = str.charAt(i); //chars是字符串的每一个字符
                if (o[chars]) { //o[chars]得到的是属性值
                    o[chars]++;
                }
                else {
                    o[chars] = 1;
                }
            }
            var max = 0;
            var ch = '';
            for (var k in o) { //遍历对象
                //k得到是属性名
                //o[k] 得到的是属性值
                if (o[k] > max) {
                    max = o[k];
                    ch = k;
                }
            }
            console.log('出现最多的字符是' + ch + ',次数为' + max);
        </script>
    </head>
    
    <body>
    
    </body>
    
    </html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值