学习js的笔记

102 阅读10分钟

一、js简介 1.js的组成 定义:js由 ECMAScript(JavaScript语法)、Dom(页面文档对象模型)、Bom(浏览器对象模型)三部分组成。

Dom:是一种标准的编程接口,通过Dom提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等)。

Bom:可以与浏览器窗口进行互动的对象结构,eg:弹出框、控制浏览器跳转、获取分辨率等。

Dom与Bom又属于Web APIs

2.js的书写位置 行内式js 直接写到元素的内部 (js 中推荐单引号) 内嵌式js

外部js (需要引入)

3.js 的输出语句 alert ( )弹出警示框 console.log ( ) 控制台打印输入信息 prompt ( ) 弹出输入框,用户可以输入信息 prompt ( )取过来的值 是字符型的 二、变量 1.变量是什么?变量的本质是什么? 白话讲,变量就是一个容器,用来存放数据的,方便我们以后使用里边的数据 变量的本质就是内存里的一块空间,用来存储数据的 2.变量命名规范 由字母、数字、下划线、$符号组成 严格区分大小写 不能以数字开头 不能是关键字、保留字 变量名最好有意义 eg:age、sex 遵守驼峰命名法(首字母小写,后面字母需要大写) eg:myFirstName 推荐的翻译网站:爱词霸、有道 3.变量的数据类型 Number(整型、浮点型) Boolean(true、false 等价于1 和 0) String(字符串型 带引号) Undefined(声明未赋值 会出现Undefined) Null (声明变量为空值) js中变量的数据类型 是根据 = 右边变量值的数据类型来判断的 记住一句话 在js里 等号就是 把右边给左边!!! 数字型进制:常见二进制、八进制、十进制、十六进制

 八进制(0~7):以0开头  逢八进一

 eg:010(八进制转为十进制)

 计算方法:0*8^2+1*8^1+0*8^0 = 0+8+0=8

 十六进制(0~9 和 A~F):以0x开头

数字型三个特殊值:

  Infinity 无穷大

 -Infinity 无穷小

  NaN 代表一个非数值 

isNaN( ) 用来判断一个变量是否为非数字的类型,返回true或false (非数字true 否则false) 字符串型String

 转义符要包含在 引号 里边

转义符 解释说明 \n 换行符,n是newline的意思 \ \ 斜杠
' ' 单引号 " " 双引号 \t tab 缩进 \b 空格,b是blank的意思 获取字符串长度 var str = 'my name is andy'; console.log(str.length); //长度为 15 字符串的拼接(只要有字符串和 其他类型拼接 最终的结果都是字符串型)

  • 总结口诀: 数值相加 字符相连 记住:引引加加 (变量和字符串 相连接的口诀)删掉数字 console.log('白雪' + 18); // '白雪18' console.log('12' + 12); // '1212' console.log(12 + 12); // 24

console.log('我今年' + age + '岁了'); //引引加加 ' '+age+' ' 布尔型Boolean

true 和 false 两个值 true值为1 false值为0 4.数据类型转换 转换为字符串型 方式 说明 案例 toString( ) 转化成字符串 var num = 1;

alert( num.toString() );

String( ) 转化成字符串 var num = 1;

alert( String(num) );

+号 拼接字符串

(隐式转换)

和字符串拼接的结果都是字符串 var num = 1;

alert( num + ' 苹果');

转换为数字型(重点) 方式 说明 案例 parseInt( ) 转换成整数数值型 parseInt('100') parseFloat() 转换成浮点数值型 parseFloat('12.31') Number() 转换为数值型 Number('12') js隐式转换(- * /) 利用算数运算隐式转换为数值型 '12' - 0 转换为布尔型Boolean

代表空、否定的会被转换为false 例如:0、NaN、null、undefined 其余值都会被转换为true 方式 说明 案例 Boolean()函数 其他类型转换成布尔值 Boolean('白雪') 三、运算符 1.递增++ 和 递减-- 运算符 注意:递增和递减运算符 必须 和变量 配合使用 单独使用时 运行结果相同 ++a 前置递增 先自加 后返回值(先己后人) a++ 后置递增 先返回原值 后自加1 (先表达式返回原值参与运算 之后变量本身再自加1) 2.比较运算符 我们程序里边的 等于符号 是 == 默认转换数据类型 会把字符串型的数据转换为数字型 只要求值相等就可以 console.log('18' == 18 ); //true
符号 作用 用法 = 赋值 把右边给左边 == 判断 判断两边值是否相等(注意此时有隐式转换) === 全等 值和数据类型 完全相等 3.逻辑运算符(返回值是true 或 false) 逻辑与&& 两侧都为true 结果才是true 逻辑或|| 两侧都为false 结果才是false 逻辑非 !true = false ; !false = true 逻辑运算符 说明 案例 &&

"逻辑与" 简称"与" and true && false || "逻辑或" 简称"或" or true || false ! "逻辑非" 简称"非" not !true 4.逻辑中断(短路运算) 原理:当有多个表达式(值)时,左边的表达式可以确定结果时,就不再继续运算右边的表达式值

逻辑与(表达式1 && 表达式2)

表达式1 为真,返回表达式2 表达式1 为假,返回表达式1 逻辑或(表达式1 || 表达式2)

表达式1 为真,返回表达式1 表达式1 为假,返回表达式2 注意:除了空、否定的为假 例如:0、NaN、null、undefined ,其余值都为真

5.赋值运算符 赋值运算符 说明 案例 = 直接赋值 var age = '18' += 、-=

加、减一个数 后再赋值 age+=5;

相等于 age = age + 5

=、/=、%= 乘、除、取模 后再赋值 age=5;

相等于 age = age * 5

6.运算符优先级 一元运算符里边的 逻辑非优先级很高 逻辑与 > 逻辑或 (优先级) 判断是否能被整除 :取余为0 优先级 运算符 顺序 1 小括号 () 2 一元运算符 ++ -- ! 3 算术运算符 先* / % 后+ - 4 关系运算符 > >= < <= 5 相等运算符 == ! = === ! == 6 逻辑运算符 先&& 后|| 7 赋值运算符 = 8 逗号运算符 , 四、循环语句 1.分支流程控制语句 (1)if语句(多选一)

// 执行思路:如果if里边条件表达式结果为真 则执行大括号里边的 执行语句 // 如果if表达式 为假 则不执行大括号里边的语句 执行if语句后边的代码

if (条件表达式) { 执行语句 } (2) if else if语句(多选一的过程)

<script>
    if (条件表达式1) {
        //语句1;
    } else if (条件表达式2) {
        //语句2;
    } else if (条件表达式3) {
        //语句3;
    } else {
        //最后的语句;
    }
</script>

(3)switch分支语句(多选一)

switch注意事项:

我们开发里边 表达式经常写成变量 表达式的值 和value的值 相匹配的时候 必须是全等 (值和数据类型完全一致)

switch...case语句和if...else...语句区别:

一般情况下 它俩可以互相替换 switch语句通常处理case为比较确定值的情况 if else if更加灵活 常用于判断范围(> = 某范围) switch语句进行判断后 直接执行到语句 效率更高 而 if else if 语句有几种条件 就得判断多少次 当分支比较少时,if else if 执行效率比switch高 当分支比较多时,switch语句执行效率比较高 而且结果更清晰 2. 三元表达式 语法 条件表达式 ? 表达式1 : 表达式2

如果条件表达式 值为真 则返回 表达式1 的值

如果条件表达式 值为假 则返回 表达式2 的值

3.for循环 重复执行某些代码 通常跟计数有关 for循环是 循环条件 和 数字 直接相关的循环 // 1.初始化变量:就是用var 声明的一个普通变量 通常用于 作为计数器使用 // 2.条件表达式:用来决定 每一次循环是否执行 就是终止的条件 // 3.操作表达式:每次循环最后执行的代码 经常用于我们计数器变量进行更新(递增或递减)

    //语法:
     for (初始化变量; 条件表达式; 操作表达式) {
         循环体
     }

    //打印100句 你好
    for (var i = 1; i <= 100; i++) {
        console.log('你好');
    }

4.断点调试 F12 sources 找到需要调试的文件 在某一行设置断点 自己在程序某一行打个断点,这样程序运行到这一行就会停住 可以一步步调试 ,观察程序的执行过程 记得刷新网页 Watch监视:可以选择监视变量值的变化 (非常常用) F11:程序单步执行,让程序一行一行的执行,观察watch中变量值的变化 小Tips:让打印结果 完全显示出来

    var str = '';  //追加字符串
    var num = 1;
    while (num <= 100) {
        str = str + '第' + num + '句你好' + '\n'    //就能显示出来啦!
        num++;
    }
    console.log(str);

   // 2.这样写的话,显示不出来全部(只会有个"100"的提示)
    var num = 1; 
    while (num <= 100) {
        console.log('你好呀!');
        num++;            
    }

5.双重 for循环 定义:在 for循环 里边再嵌套一个 for循环

实现:可以打印 五行五列的星星、一个倒直角三角形等

注意点:

外层循环1次,内层循环执行全部 外层循环控制 行数,内层循环控制 列数(每行的个数) 6.while循环 // 1.语法结构:while 当 ... 的时候 while (条件表达式) { 循环体 }

    // 2.执行思路:当条件表达式结果为 true 则执行循环体 否则 退出循环,执行后边的代码

    var num = 1; // 计数器 初始化变量
    while (num <= 100) {
        console.log('你好呀!');
        num++; // 完成计数器的更新 防止死循环      
    }

7.do while循环 // 1.do while 语法: do { 循环体 } while (条件表达式)

// 2.执行思路:先执行一次循环体 再判断条件 如果条件表达式为真,则继续执行循环体,否则退出循环

// 3.打印100句 我喜欢你 var i = 1; do { console.log('我喜欢你'); i++; } while (i <= 100) while 和 do while 的区别

while先判断 再执行循环体 do while 先执行循环体 再判断(循环体至少执行一次) 8.continue 和 break continue 关键字:退出本次循环,继续执行剩余次数的循环 break 关键字:退出整个循环 五、数组 1.数组(Array) 定义:就是一组数据的集合,存储在单个变量下(数组里边的数据 成为数据元素)

(1)创建数组

利用new 创建数组 var arr = new Array(); //创建了一个 空数组 利用数组字面量创建数组 var arr1 = []; //创建了一个 空数组 注意点:

获取数组元素 数组名[索引号] 索引号从0开始 数组里边可以存放 任意类型的数据(字符串、数字、布尔值等) (2)遍历数组

定义:就是把数组的元素从头到尾访问一次

注意点:

遍历是通过 for循环 进行的 (想把数组里边的值取出来 就通过遍历 for循环) 索引号 i 从0开始 ; i 的范围 不带等号 arr [ i ]是 数组元素第 i 个 ; i 是计数器(当索引号使用) var arr = ['red', 'green', 'blue']; for (i = 0; i < 3; i++) { console.log(arr[i]); // 'red', 'green', 'blue' 必须是arr[i] }

    // 注意点:★
    // 1.i0开始 所以 i < 3 (不能含等号)
    // 2.只能输出打印arr[i] 而不能是i 
    // 3.arr[i]是 数组元素第ii是计数器(当索引号使用)

(3)数组长度:数组名.length

数组长度是元素个数 不要跟索引号i混淆 arr.length 动态监测数组元素的个数(方便添加数组元素 ) var arr = ['red', 'green', 'blue']; for (i = 0; i < arr.length; i++) { console.log(arr[i]); } (4)新增数组元素

修改 arr.length 的长度

修改索引号 追加数组元素(也可以替换 数组元素)

2.冒泡排序 ★ 定义:一次比较两个元素,如果它们的顺序错误就把它们交换过来(从大到小or从小到大的顺序) var arr = [4, 1, 2, 3, 5]; //从大到小排序 for (var i = 0; i <= arr.length - 1; i++) { //外层循环 管趟数 for (var j = 0; j <= arr.length - i - 1; j++) { //内层循环 管每一趟的交换次数 // 内部交换2个变量 前一个和后一个数组元素相比较 if (arr[j] < arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } console.log(arr);