赞
踩
目录
定义:js由 ECMAScript(JavaScript语法)、Dom(页面文档对象模型)、Bom(浏览器对象模型)三部分组成。
Dom:是一种标准的编程接口,通过Dom提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等)。
Bom:可以与浏览器窗口进行互动的对象结构,eg:弹出框、控制浏览器跳转、获取分辨率等。
Dom与Bom又属于Web APIs
<input type="button" value="点我" onclick="alert('你好')" />
- <script>
- alert('刘亦菲yyds');
- </script>
<script src="my.js"></script>
数字型进制:常见二进制、八进制、十进制、十六进制
八进制(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 代表一个非数值
字符串型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
方式 | 说明 | 案例 |
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
方式 | 说明 | 案例 |
Boolean()函数 | 其他类型转换成布尔值 | Boolean('白雪') |
1.递增++ 和 递减-- 运算符
console.log('18' == 18 ); //true
符号 | 作用 | 用法 |
= | 赋值 | 把右边给左边 |
== | 判断 | 判断两边值是否相等(注意此时有隐式转换) |
=== | 全等 | 值和数据类型 完全相等 |
3.逻辑运算符(返回值是true 或 false)
逻辑运算符 | 说明 | 案例 |
&& | "逻辑与" 简称"与" and | true && false |
|| | "逻辑或" 简称"或" or | true || false |
! | "逻辑非" 简称"非" not | !true |
原理:当有多个表达式(值)时,左边的表达式可以确定结果时,就不再继续运算右边的表达式值
逻辑与(表达式1 && 表达式2)
逻辑或(表达式1 || 表达式2)
注意:除了空、否定的为假 例如:0、NaN、null、undefined ,其余值都为真
赋值运算符 | 说明 | 案例 |
= | 直接赋值 | var age = '18' |
+= 、-= | 加、减一个数 后再赋值 | age+=5; 相等于 age = age + 5 |
*=、/=、%= | 乘、除、取模 后再赋值 | age*=5; 相等于 age = age * 5 |
优先级 | 运算符 | 顺序 |
1 | 小括号 | () |
2 | 一元运算符 | ++ -- ! |
3 | 算术运算符 | 先* / % 后+ - |
4 | 关系运算符 | > >= < <= |
5 | 相等运算符 | == ! = === ! == |
6 | 逻辑运算符 | 先&& 后|| |
7 | 赋值运算符 | = |
8 | 逗号运算符 | , |
(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注意事项:
- <script>
- // 1.语法结构:(switch转换、开关 case小例子、选项)
- // 2.执行思路:利用我们的表达式的值 和 case 后面的value值相匹配
- // 如果匹配上 就执行该case里边的语句
- // 如果都没有匹配上 则执行default里边的语句
-
-
- switch (表达式) {
- case value1: //注意:case 值后边 这里是冒号:
- 执行语句1;
- break;
- case value2:
- 执行语句2;
- break;
- case value3:
- 执行语句3;
- break;
- ...
- default:
- 执行最后的语句;
- }
- </script>
switch...case语句和if...else...语句区别:
语法 条件表达式 ? 表达式1 : 表达式2
如果条件表达式 值为真 则返回 表达式1 的值
如果条件表达式 值为假 则返回 表达式2 的值
- // 1.初始化变量:就是用var 声明的一个普通变量 通常用于 作为计数器使用
- // 2.条件表达式:用来决定 每一次循环是否执行 就是终止的条件
- // 3.操作表达式:每次循环最后执行的代码 经常用于我们计数器变量进行更新(递增或递减)
-
- //语法:
- for (初始化变量; 条件表达式; 操作表达式) {
- 循环体
- }
-
- //打印100句 你好
- for (var i = 1; i <= 100; i++) {
- console.log('你好');
- }
小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++;
- }
定义:在 for循环 里边再嵌套一个 for循环
实现:可以打印 五行五列的星星、一个倒直角三角形等
注意点:
- // 1.语法结构:while 当 ... 的时候
- while (条件表达式) {
- 循环体
- }
-
- // 2.执行思路:当条件表达式结果为 true 则执行循环体 否则 退出循环,执行后边的代码
-
- var num = 1; // 计数器 初始化变量
- while (num <= 100) {
- console.log('你好呀!');
- num++; // 完成计数器的更新 防止死循环
- }
- // 1.do while 语法:
- do {
- 循环体
- } while (条件表达式)
-
- // 2.执行思路:先执行一次循环体 再判断条件 如果条件表达式为真,则继续执行循环体,否则退出循环
-
-
- // 3.打印100句 我喜欢你
- var i = 1;
- do {
- console.log('我喜欢你');
- i++;
- } while (i <= 100)
while 和 do while 的区别
定义:就是一组数据的集合,存储在单个变量下(数组里边的数据 成为数据元素)
(1)创建数组
var arr = new Array(); //创建了一个 空数组
var arr1 = []; //创建了一个 空数组
注意点:
(2)遍历数组
定义:就是把数组的元素从头到尾访问一次
注意点:
- var arr = ['red', 'green', 'blue'];
- for (i = 0; i < 3; i++) {
- console.log(arr[i]); // 'red', 'green', 'blue' 必须是arr[i]
- }
-
- // 注意点:★
- // 1.i 从0开始 所以 i < 3 (不能含等号)
- // 2.只能输出打印arr[i] 而不能是i
- // 3.arr[i]是 数组元素第i个 i是计数器(当索引号使用)
(3)数组长度:数组名.length
- var arr = ['red', 'green', 'blue'];
- for (i = 0; i < arr.length; i++) {
- console.log(arr[i]);
- }
(4)新增数组元素
修改 arr.length 的长度
修改索引号 追加数组元素(也可以替换 数组元素)
定义:一次比较两个元素,如果它们的顺序错误就把它们交换过来(从大到小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);
-
- // 由于每一轮循环都会确定一个当前轮数下的最大元素,因此在下一轮循环中可以减少遍历的元素个数
- // arr.length - i - 1 表示未排序部分的长度
- // -i目的:忽略已经排好的末尾部分,减少内层循环的遍历次数 (i是轮数 )
-
定义:函数就是封装了一段可以被重复调用执行的代码块 目的:实现大量代码的重复使用
命名:函数命名一般用 动词 get Sum 等,变量命名一般用 名词 sum等
算法:观察变化 找出规律 转换为代码
函数的封装:把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
简单理解:封装 就是将电脑配件整合组装到机箱中 (类似快递打包)
函数的使用:
- // 函数的使用:声明函数 和 调用函数
- // 1.声明函数 两种方式:(1)利用函数关键字自命名函数 (2) 使用函数表达式声明函数 (匿名函数)
- function 函数名(){
- 函数体
- }
-
- function sayHi() {
- console.log('hi~~');
- }
- // 2.调用函数 函数名();
- sayHi();
-
- // (2) 函数表达式(匿名函数)★
- // var 变量名 = function(){
- // 函数体
- // }
- var fun = function (aru) {
- console.log('我是函数表达式');
- console.log(aru);
- }
- fun('我传递参数给aru');
注意点:
尽量让实参和形参 个数相匹配
函数可以带参数 也可以不带参数 (带参数的话,参数个数不限)
在js中,形参默认值是:undefined
参数作用:函数内部某些值不固定,我们可以通过参数在调用函数时传递不同的值进去
- // function 函数名(形参1,形参2...){
-
- // }
- // 函数名(实参1,实参2...)
-
- // 形参和实参 的执行过程 arguments 参数
- function cook(aru) { // 类似于赋值操作 aru = '辣子鸡'
- console.log(aru);
- }
- cook('红烧排骨');
- cook('辣子鸡');
- // 代码比较:
- // 1. 把实参传给 形参 然后打印出来
- function cook1(aru) {
- console.log(aru);
- }
- cook1('卤猪蹄')
-
- // 2. 把实参传给 形参 再把return后面的值 返回给调用者cook(); 然后打印出来
- function cook(aru) {
- return aru;
- }
- console.log(cook('大肘子'));
每个函数都内置的有arguments对象
arguments中 存储了传递的所有实参
arguments的展示形式 是一个 伪数组,因此可以进行遍历
伪数组特点:
6.作用域
作用域:就是代码名字(变量) 在某个范围内 起作用和效果 目的:提高程序可靠性 减少命名冲突
变量的作用域
全局变量:在全局作用域下的变量 全局下都可以使用
如果在函数内部 没有声明直接赋值的变量也属于 全局变量 ★
局部变量:在局部作用域下的变量 或者 在函数内部的变量就是 局部变量
函数的形参也可以看做是局部变量
现阶段我们的js中 没有块级作用域
- // 块级作用域 {}
- // 在java中
- // if (xx) {
- // int num = 10;
- // }
- // 外面 是不能调用num的
-
- //注意:
- // js没有块级作用域 我们在花括号写的变量 也可以被外部调用 ★
- // 不要和局部作用域 弄混淆了 ★
- if (3 < 5) {
- var num = 10;
- }
- console.log(num); // 10
作用域链:内部函数访问外部函数的变量 采取的 链式查找的方式 目的:用于决定取哪个值
定义:在js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等
通俗理解: 对象是一个具体的事物,看的见摸得着的实体
组成:对象是由 属性 和 方法 组成的
(1) 利用对象字面量 创建对象 { }
- // var obj = {}; // 创建了一个空的对象
- var obj = {
- uname: '白小雪',
- age: 18,
- sex: '男',
- sayHi: function () {
- console.log('hi~');
- }
- }
-
- console.log(obj.uname); // 对象名.属性名
- console.log(obj['age']); // 对象名['属性名']
- obj.sayHi(); // 对象名.方法名()
(2)利用 new Object 创建对象
- var obj = new Object(); // 创建了一个空对象
- obj.uname = '上官雪儿';
- obj.age = 21;
- obj.sex = '女';
- obj.sayHi = function () {
- console.log('hi~');
- }
-
- console.log(obj.uname);
- console.log(obj['sex']);
- obj.sayHi();
(3)利用构造函数 创建对象 ★
- // 构造函数 语法格式:
- function 构造函数名(){
- this.属性 = 值;
- this.方法 = function(){
-
- }
- }
- new 构造函数名(); // 调用构造函数 必须用 new ★
-
- // 举例
-
- function Star(uname, age, sex) {
- this.name = uname;
- this.age = age;
- this.sex = sex;
- this.sing = function (sang) {
- console.log(sang);
- }
- }
- var ldh = new Star('刘德华', 18, '男'); // 调用函数 返回的是一个对象
- // console.log(typeof ldh); // object
- console.log(ldh.name);
- console.log(ldh['sex']);
- ldh.sing('冰雨'); // // 调用对象的方法 对象名.方法名()★
-
- var zxy = new Star('张学友', 21, '男');
- console.log(zxy.name);
- console.log(zxy.age);
定义:抽取对象 相同的 属性和方法 封装到函数里面 (泛指某一大类) eg:Star
- // 语法:
- for(变量 in 对象){
-
- }
- // 举例
- var obj = {
- name: 'pink老师',
- age: 18,
- sex: '男'
- }
-
- for (var k in obj) {
- console.log(k); // k 变量 输出 得到的是 属性名
- console.log(obj[k]); // obj[k] 得到的是 属性值
- }
定义:js自带的一些对象,供开发者使用,提供了一些常用的功能(属性和方法)
优点:帮助我们快速开发
js常用内置对象:Math、Date、Array、String等
MDN:https://developer.mozilla.org/zh-CN/
W3C:w3school 在线教程
方法名 | 说明 |
getFullYear() | 获取当年 |
getMonth() | 获取当月(0~11) 返回月份小一个月 记得月份 +1 操作! |
getDate() | 获取当天日期 |
getDay() | 获取星期几(周日0) |
getHours() | 获取当前小时 |
getMinutes() | 获取当前分钟 |
getSeconds() | 获取当前秒 |
- var time = new Date()
- console.log(time.getFullYear());
- console.log(time.getMonth() + 1);
- console.log(time.getDate());
- console.log(time.getDay());
- console.log(time.getHours());
- console.log(time.getMinutes());
- console.log(time.getSeconds());
方法名 | 说明 | 返回值 |
push(参数1,参数2...) | 末尾添加一个或多个元素 | 并返回新的长度 |
pop() | 删除数组最后一个元素 | 返回它删除的元素值 |
unshift(参数1,参数2...) | 开头添加一个或多个元素 | 并返回新的长度 |
shift() | 删除数组第一个元素 | 并返回他删除的元素值 |
方法名 | 说明 |
instanceof | arr instanceof Array 检测是否为数组 |
Array.isArray(参数) | Array.isArray(arr) H5新增的 支持ie9以上版本 |
方法名 | 说明 |
reverse() | 翻转数组中元素的顺序 |
sort | 对数组元素进行排序(参考冒泡排序效果) |
- // 数组排序 (冒泡排序) 记住这种方法!
- var arr = [3, 2, 57, 68, 25, 99];
- arr.sort(function (a, b) {
- // return a - b; // 升序排序
- return b - a; // 降序排序
- });
- console.log(arr);
方法名 | 说明 | 返回值 |
indexOf() | 从前往后找 只找第一个匹配的 | 如果存在则返回索引号,不存在 返回 -1 |
indexOf('要查找的数组元素',开始的位置) | 从开始位置查找 只找第一个匹配的 | 返回从指定位置开始查找 符合要求的数组元素 索引号,不存在 返回 -1 |
lastIndexOf() | 从后往前找 只找第一个匹配的 | 如果存在则返回索引号,不存在 返回 -1 |
方法名 | 说明 |
concat(arr1,arr2,arr3...) | concat()方法用于 连接两个或多个数组 |
slice(start,end) | 从start位置开始,截取到end位置 end取不到 ; slice 不会改变原始数组,要把截取后的数组 赋给一个新数组 ★ |
splice(start,length) | 数组删除 splice(第几个开始,要删除个数) |
方法名 | 说明 | 返回值 |
toString() | 把数组转换为字符串 | 返回一个字符串 |
join('分隔符') | 把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
方法名 | 说明 | 使用 |
charAt(index) | 获取指定位置处字符 (index:字符串的索引号) | str.charAt( ) |
charCodeAt(index) | 获取指定位置处字符的ASCII码 | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 (str是变量名) | HTML5,IE8+ 支持 |
ASCII码值:
方法名 | 说明 | 返回值 |
indexOf('要查找的字符',开始的位置) | 从开始位置查找 只找第一个匹配的 | 返回从指定位置开始查找 符合要求的字符串索引号,不存在 返回 -1 |
方法名 | 说明 |
concat(str1,str2,str3...) | concat()方法 用于连接两个或多个字符串 拼接字符串,等效于+ 号 +号更常用 |
substr(start,length) | 从start位置开始(索引号) length截取的个数; 括号内只写一个 默认为:从开始位置 截取到最后 |
substring(start,end) | 从start位置开始,截取到end位置 end取不到 (不接受负值) |
slice(start,end) | 从start位置开始,截取到end位置 end取不到 |
replace('字符','替换字符') | 替换为空字符串 相当于删除 |
方法名 | 说明 |
toUpperCase() | 转换大写 |
toLowerCase() | 转换小写 |
方法名 | 说明 |
Math.abs( ) | 取绝对值 |
定义:把简单数据类型 包装成为 复杂数据类型 这样简单数据类型就有了属性和方法
定义:指原来的值还在 改变的只是它的地址 内存中开辟了一个新的内存空间用于存储它
字符串所有的方法,都不会修改字符串本身(字符串是不可变的)操作完成会返回一个新的字符串
(1) 简单数据类型
定义:在存储时,变量中存储的是值本身,因此又叫做值类型 或者 基本数据类型
存放在栈里面 里面直接开辟一个空间存放的是值
简单数据类型 null 返回的是一个空的对象 object(如果有个变量 我们以后打算存储为对象 暂时没想好放什么 这个时候就给 null)
举例:string number boolean undefined null
(2) 复杂数据类型
定义:在存储时,变量中存储的仅仅是地址(引用),因此又叫做引用数据类型
首先在栈里面存放地址 十六进制表示 然后这个地址指向堆里面的数据
Object Array Date等 (通过new关键字创建的对象 包括系统对象 自定义对象)
栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等 (存放简单数据类型)
堆(操作系统):一般由程序员分配释放 若程序员不释放 由垃圾回收机回收 (存储复杂数据类型-对象)
注意:js中没有堆栈的概念 我们采取通过堆栈的方式 让大家更容易理解代码的执行
(1)简单数据类型传参
函数的形参也可以看作是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到外部变量
(2)复杂数据类型传参
函数的形参也可以看作是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。