JavaScript
客户端脚本语言
- javascript和java之间的关系
- 类似张三和张三丰,老婆和老婆饼,印度和印度尼西亚,周杰和周杰伦…
JavaScript的组成
- ECMAScript 核心语法
- DOM 文档对象模型
- 操作html元素的方法和接口
- BOM 浏览器对象模型
- 与浏览器进行交互的方法和接口
JavaScript的使用方式
- 行内:结合事件一起使用
- 内部:定义script标签对
- 外部:使用script标签,引入外部的js文件
- 语法:
- 注意:如果一个script标签对引用外部文件了,就不要再写js代码了(无效)
JavaScript出现的位置
-
script可以出现在html中的任意位置
-
推荐使用的位置:
- head中
- 优点:便于后期维护
- 缺点:有可能获取不到元素等… window.onload()
- body结束之前
- 保证待页面中所有内容加载之后再去执行,不会出现获取不到元素的问题
- head中
JavaScript调试方式
-
alert() 弹出框
- 阻塞页面加载,需要手动点击,不推荐使用
-
2.document.write() 页面中写出
- 当页面加载完成之后,再触发doucument.write()的执行
- 可以写出内容,及标签
- 会覆盖页面,不推荐使用
-
3.console.log() 控制台输出,推荐使用
- console.info()
- console.warn()
- console.error()
变量
- java是强类型的语言,js是弱类型的语言
- 定义变量:
- var 关键字
- 声明的同时赋值
- var 变量名 = 变量值;
- 先声明后赋值
- var 变量名;
- 变量名 = 变量值;
- 同时输入多个变量值,使用 , 进行分隔
- 一个变量如果只声明未赋值就是undefined
- is not defined 变量不是使用var关键字定义
- 变量的作用域提升问题
- 使用var关键字声明的变量,变量的声明会提升到当前作用域的最上方
数据类型
基础数据类型
- String 字符串类型 — 控制台打印字体为 黑色
- 把内容定义在一对 ‘’ 或者 “” 之间,但是要求前后引号一致
- 可以使用转义字符 \
- Number 数值型 — 控制台打印字体为 蓝色
- NaN:not a number
- 出现NaN类型的情况:
- 直接赋值NaN
- 无法正常运算出结果的时候会出现NaN类型
- Boolean 类型 — 控制台打印字体为 蓝色
- 严格区分大小写
- Undefined 未定义 — 控制台打印字体为 灰色
- 直接赋值undefined
- 变量只声明未赋值
- Null 空 — 控制台打印字体为 灰色
- 直接赋值Null
- 获取不到
- Undefined和Null的区别:
- undefined是有,但是没有值
- null是没有定义,没有
- function 函数
- 使用关键字function定义函数
复合数据类型
- 对象 Object
- 语法:var obj = {
key:value,
key:value,
…
} - 对象中的数据都是键值对形式存在的
- 每两个键值对之间使用 , 分隔,最后一个键值对后不存在
- key满足标识符的标识符的命名规范,如果不满足定义在一对引号中
- value可以是任意数据类型的值
typeof 操作符
判断数据的数据类型
- 语法:
- typeof 数据
- typeof(数据)
- 返回数据的类型的小写形式
- 注意:null返回object
数据类型转换
自动类型转换
不是为了进行类型转换才类型转换,而是为了进行某种操作需要满足某种类型,才会自动发生类型转换
- +、-、*、/ 、…
- ‘+’ 左右两边有字符串的出现,字符串的连接符使用
- ‘+’ 左右两边没有字符串出现时,先把数据类型转为数值型,再去参与运算
强制类型转换
通过方法,把任意类型转换成为一下三种形式
-
String类型
- String(数据)
- 在数据的前后添加一对引号
-
Number类型
-
Number(数据)
- String
- “” 0
- " " 0
- “纯数字” 纯数字
- “非纯数字” NaN
- Boolean
- false 0
- true 1
- Null 0
- Undefined NaN
- String
-
parseInt()
- 在转换之前,首先会分析该字符串,判断位置为0处的字符,判断它是否是个有效数字,如果不是,则直接返回NaN,不再继续,如果是则继续,直到找到非字符
-
parseFloat()
- parseFloat()方法与 parseInt()方法的处理方式相似,从位置 0 开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字 符之前的字符串转换成数字
- 第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的,parseFloat()方法会把这个小数点之前的字符串转换成数字
-
-
Boolean类型
- Boolean(数据)
- String
- “” false
- " " true
- 非空串 true
- Number
- 0 false
- 非0 true
- NaN false
- Null false
- Undefined false
- String
- Boolean(数据)
运算符(只整理与JAVA不同的地方)
等号问题
- = 赋值
- == 比较值是否相等
- === 比较值和类型是否都相等
- 如果类型就不相等,不会进一步比较值
逻辑运算符
-
&&
- 操作数为boolean类型时 --> 一个为假就是假,两个都为真就是真
- 操作数有其他类型时 -->
- 第一个操作数如果转为boolean类型为true,结果就是第二个操作数的值
- 第一个操作数如果转为boolean类型为false,结果就是第一个操作数的值
-
||
- 操作数为boolean类型时–>一个为真就是真,两个都为假就是假
- 操作数有其他类型时–>
- 第一个操作数如果转为boolean类型为true,结果就是第一个操作数的值
- 第一个操作数如果转为boolean类型为false,结果就是第二个操作数的值
-
! 非 取反
-
当操作数为其他类型时候,先转为boolean类型,再进行取反
-
!!
- 布尔类型 --> 取反再取反,就是本身
- 非布尔类型 --> 转为boolean类型
块 { }
- js中的 {}不成作用域
- js中的作用域只看函数
数组
JavaScript中数组的特性
- 存储多个数据
- 存储任意类型的数据
- 长度可以改变
- 有索引的概念,可以根据索引操作数据中的数据
- 提供了一些列的方法操作数组
- 长度属性:数组名.length
- 可以更改数组的长度:数组名.length = 新长度
- 使用数组中的数据 – 数据名[索引]:赋值,修改值,获取值
- 数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界
定义数组
- new Array():通过new关键字创建一个空数组
- new Array(值1,值2…):通过new关键字创建数组并同时赋值
- [值1,值2,…]:字面量方式创建数组 ---- 推荐
数组中的属性
- 当[]中的索引为非负整数(包括整数字符串):自动从0开始,不存在添加 undefined
- 当[]中的索引为负数、小数、非数字符串:这些内容不计算在长度内,当成"属性"处理,相当于自定义属性
数组的遍历
-
普通for --> 不遍历属性
-
for … in … --> 不遍历属性和索引中的 undefined
-
forEach --> 不遍历索引中的 undefined
//1.普通for for(var i=0; i < arr.length; i++){ console.log(arr[i]); } //2.for ... in ... for(var a in arr){ // a作为索引 console.log(arr[a]); } //3.forEach arr.forEach(function(element, index, arr){ console.log(element, index, arr); });
数组的常用方法
- push 添加元素到最后
- unshift 添加元素到最前
- pop 删除最后一项
- shift 删除第一项
- reverse 数组翻转
- join 数组转成字符串
- indexOf 数组元素索引
- slice 截取(切片)数组,原数组不发生变化
- 1个参数 这个索引位置开始截取到最后
- 2个参数 从起始索引开始截取到结束索引,结束索引不包含
- splice 剪切数组,原数组变化,可以实现前后删除效果
- 1个参数 原数组相当于剪切,返回被截取的部分
- 2个参数 参数1为起始索引,参数2为个数
- 3到多个参数 参数1为起始索引,参数2为个数,后面的参数为替换的数据
- concat 数组合并