JavaScript概念:
是一种表述语言,也是一种给予对象和事件驱动(EventDriven)的,安全性好的脚本语言,
运行在客户端,从而减轻服务器端的负担。
一。了解js
1.在一个网页里面有三部分
1. html 表示结构
2. css 表示样式
3. JS 表示行为
2.JS的书写方式分为三种
1. 行内式(强力不推荐)
2.内嵌式(方便使用)
3. 外链式(推荐)
3. JS的输出语句
1.alert() 以浏览器弹出层的形式展示内容
2.console.log() 在浏览器控制台中打印你需要输出的内容
3.document.write() 在页面中直接写入你要输出的内容
二。变量
1. 变量的命名规范和命名规则
1.规则:你必须遵守,不然就会报错
1.1 一个变量只能有数字(0-9) 字母(a-zA-Z) 美元符($) 下划线(_) 组成
1.2 一个变量不能有数字开头
1.3 在JS中严格区分大小写 比如说 num Num nUm nuM 等等都不是同一个变量
1.4 不能使用关键字或者保留字
关键字:现在JS语法中正在使用的关键字(比如说var)
保留字:现在JS还没用 但是将来可能会用
2.规范:建议你去遵守,因为大家都这样
2.1 不要使用中文命名
2.2 变量命名应该语义化
2.3 驼峰命名法 当一个变量是由多个单词组成的时候 第二个单词开始 首字母大写
3.变量的赋值和变量的初始化
1.声明一个age的变量
2.把值赋值给声明的变量
3.输出结果
4.变量的初始化 声明一个变量的同时并且给声明的变量赋值就叫做变量的初始化
//1.声明一个age的变量
var age;
//2.把值赋值给声明的变量
age = 18;
//3.输出结果
console.log(age);
//4.变量的初始化 声明一个变量的同时并且给声明的变量赋值就叫做变量的初始化
var myname = '张三丰';
console.log(myname);
4.交换两个变量(交换左手和右手两个变量)
理念:
1.我们需要声明一个为空数据的临时变量开帮助我们 (temp)
2.先把变量apple1中的数据放在临时变量里面
3.在把变量apple2中的数据放在变量apple1中
4.最后把临时变量temp中的数据赋值给变量apple2
//1.我们需要声明一个为空数据的临时变量开帮助我们
var temp;
var apple1 = '我是变量一中的青色苹果@@@@@@@';
var apple2 = '我是变量二中的红色苹果%%%%%%%';
//2.先把变量apple1中的数据放在临时变量里面
temp = apple1;
//3.在把变量apple2中的数据放在变量apple1中
apple1 = apple2;
//4.最后把临时变量temp中的数据赋值给变量apple2
5.JS的数据类型
JS把一个变量可以存储的各种各样的数据,做了一个区分 分成两个类型
1.基本数据类型(简单数据类型)
1.1 Number 数值型
1.2 String 字符串型
1.3 Boolean 布尔型
1.4 Undefined 未定义
1.5 Null 空
2.复杂数据类型(地址数据类型/引用数据类型)
2.1 Object 对象
.2 Function 函数
6.js种特殊的数值
1. js中数值的最大值
console.log(Number.MAX_VALUE);
2. js中数值的最小值 采用的是科学计数法
console.log(Number.MIN_VALUE);
3.无穷大
console.log(Number.MAX_VALUE * 2);
4. 无穷小
console.log(-Number.MAX_VALUE * 2);
5. 非数值NaN Not a Number 的简写
console.log('猪猪侠' - 100); //计算机也不知道猪猪侠减去100是个啥;反正不是数值
7.isNaN()
isNaN()用来判断一个变量不是一个数字是否成立 成立返回false 不成立返回true,
//如果是数字,判断有误,返回一个错false;假的赝品
//如果不是数字,判断正确,返回一个true;真的本尊
示例:
var userName = '张三丰';
console.log(isNaN(userName)); //true 张三丰是非数字
var userAge = 18;
console.log(isNaN(userAge)); //false 18不是非数字
8.typeof检测数据类型
1.typeof 可以用来检测变量中存放的值属于哪种数据类型
两种用法:
方法一: typeof 变量
语法: typeof 后面跟上要检测的变量
返回值结果:以字符串的形式给你的变量数据类型
方法二: typeof(变量)
语法:typeof(要检测的变量)
返回值结果:以字符串的形式给你变量的数据类型
2.两种变量的区别
1.typeof只能检测紧跟着的一个变量
2.typeof()先去运算小括号里面的结果 然后使用typeof去检测运算结果的数据类型
3.如果你只是检测一个变量的数据类型 用哪一个都一样 但是如果你想检测一个表达式的数据类型 答案不一样
3.typeof 的返回值
!!! 注意 typeof的返回值是一个字符串
当两个以及以上typeof连用的时候 一定得到string
typeof只能够检测基本数据类型
检测数值 返回number
检测字符串 返回string
检测布尔 返回boolean
检测undefined 返回undefined
检测null 返回object
示例:
// 验证区别的实例
// 1.需求:我想计算100+200的结果的数据类型
var n1 = 100;
var n2 = 200;
var res3 = typeof n1 + n2;
// var res3 = 'number' + n2;
console.log(res3);
// 这是怎么运算的呢? 首先他先是计算typeof n1 然后用typeof n1的结果去和n2进行加法运算
// 最后的结果就是number200 首先typeof n1的结果是number 不过是一个字符串类型的number 之后和后面的n2拼接
// 结果就是number200
// var res4 = typeof(n1 + n2);
// console.log(res4);
// 结果就是number 所以你能够得到两个不同的结果
// 2.typeof连用
var n4 = 100;
// console.log(typeof n4);
// 从右向左进行运算
// 先计算2号typeof检测n4的结果 应该是number 但是返回值一定是一个string
// 在计算1号typeof检测typeof n4的结果 也就是typeof number 所以结果就是string
console.log(typeof typeof n4);
// console.log(typeof 'number');
9.其他数据类型转换数字型
1.parseInt(变量) 取整
console.log(parseInt('3.1415')); //取整数 3 没有四舍五入
console.log(parseInt('4.98')); //4
console.log(parseInt('120pxrem'));//120
console.log(parseInt('rem120px')); //NaN
2.parseFloat(变量) 浮点小数
console.log(parseFloat('3.1415926')); //3.1415926
console.log(parseFloat('3.98')); //3.98
console.log(parseFloat('120pxrem')); //120
console.log(parseFloat('rem120px')); //NaN
3.Number(变量)
var str = "123456";
console.log(Number(str));
//或者直接把字符串写在Number()的括号里
console.log(Number('3.1415926'));
var str2 = 'abc';
// abc我没有办法给你转换成一个合法的数字
// 但是你又非得让我给你转换为数字 我自己转不了 所以我只能够给你转换为数值类型
// 但是告诉你是非数字 所以结果就是数值类型的非数字 NaN
var res2 = Number(str2);
console.log(res2); //NaN
4. 非加法的数学运算
a*1 这样既不改变变量的大小 又能够实现数值的转换
a/1 这样既不改变变量的大小 又能够实现数值的转换
a-0 这样既不改变变量的大小 又能够实现数值的转换
console.log('12' - 0);
console.log('12' / 1);
console.log('12' * 1);
console.log(true * 1); //也就是1*1
10.其他类型转换字符串类型
1.利用String(变量) 这个函数强制转换 任何数据类型都能够转换
2. 变量.toString() undefined 和 null 不能够转换
var num = 1000;
var b1 = true;
var u;
var nu = null;
console.log(num.toString());
console.log(b1.toString());
console.log(u.toString());//报错
console.log(nu.toString());//报错
3.利用加号拼接字符串的方法实现转换效果
在JS里面,加号(+) 有两个意义
1.进行字符串的拼接
只要符号任意一边是字符串的时候,就是字符串拼接
2.进行数学运算
只有两边都是数字或者布尔的时候,会进行数学运算
11.其他类型转换布尔类型
使用Boolean() 函数
语法:Boolean(你要转换的数据)
返回值:转换好的数据
特点:
在JS里面只有五个内容转换为false 代表空 否定的值都转换为false
空字符串 ''
0
NaN
null
undefined
其他所有的内容都转换为true
三。运算符
1.数学运算符
1. +
有两个含义
字符串的拼接
数学运算
2. -
3. *
4. /
5. %
取两个数的余数
被除数/除数=商......余数
得到不能被整除的部分
取余使用的是百分号%
6. ** 取幂
a**b 就是a的b次方
2.赋值运算符
1. =
// 赋值:把等于号右边的赋值给左边的变量
// 2. +=
// 这个是加法和赋值的合作
// a+=b 等价于 a=a+b 注意顺序一定不能写反了 就是自己在自己的基础上叠加
// 因为你在计算数的时候是一样的 a+b 和 b+a 没区别
// 但是字符串在拼接的时候谁在前面谁在后面就有区别了
// 3. *=
// 这个是乘法和赋值的合作
// a*=b 等价于 a=a*b
// 在自己的基础上进行叠加
// 4. /=
// 5. %=
// 6. -=
// = 直接赋值 var num=10;
// += -= 加减一个数后再赋值 var age=10; age+=5; console.log(age)
// *= /= %= 乘等 除等 取模赋值 var age=2; age*=5; console.log(age)
3.比较运算符
两个数据进行比较的符号
1. >
左边大于右边 得到true
左边不大于右边 得到false
2. <
左边小于右边 得到true
左边不小于右边 得到false
3. >=
左边大于或者等于右边 得到true
左边小于右边 得到false
4. <=
左边小于或者等于右边 得到true
左边大于右边 得到false
5. ==
比较两边的数据值是不是相等,不管数据类型
6. ===
比较两边的数据是不是相等 值和数据类型都要比较
7. !=
比较两边的数据值是不是不等 不管数据类型
8. !==
比较两边的数据是不是不等 值和数据类型都要比较
值不一样那可定是true 当数据类型不一样的时候 那就是true 不再管值了
4.逻辑运算符
逻辑与 && and
逻辑或 ||
逻辑非 !
总结 1. 逻辑与&& 两边都是true 才返回true 只要有一边是false那就返回false
2. 逻辑或 || 两边都是false才返回false 两边只要有一边是true那就返回true
3. 逻辑非 ! 也叫作取反符 用来取一个布尔值相反的值 ,如果为true那就返回false 如果为 false 那就返回true
5.递增运算符
1.前置递增运算符 ++num 前置递增 自加1,类似于num=num+1;但是++num写起来更加简单
使用口诀:先是自加1,将结果返回给++变量
2.后置递增运算符
把++放到我们变量的后面num++ 类似于num=num+1,但是num++写起来更加的简单,实现的效果和前置是一样的,每次让这个变量自动加上1
后置自增口诀是:先返回值,变量自加1
6.运算符优先级
优先级 运算符 顺序
1 小括号 ()
2 一元运算符 ++ -- !
3 算术运算符 先* / % 再+ -
4 关系运算符 > >= < <=
5 相等运算符 == != === !==
6 逻辑运算符 先逻辑与&& 再逻辑或 ||
7 赋值运算符 =
8 逗号运算符 , 声明多个变量用逗号隔开
总结 一元运算符里面的逻辑非 ! 优先级很高
逻辑与比逻辑或优先级高
四。流程控制
1.if语句
四种书写方式
1-1. if(条件){要执行的代码}
当条件满足的时候(也就是表达式为true)的时候 执行大括号里面的代码
当条件不满足的时候(也就是表达式为false)的时候 不执行大括号里面的代码
1-2. if(条件){要执行的代码} else {要执行的代码}
当条件满足的时候 执行if后面大括号里面的代码
当条件不满足的时候 执行else后面大括号里面的代码
1 -3. if(条件1){ 条件1要执行的代码} else if(条件2){条件2要执行的代码}
从第一个开始 哪一个条件满足了 就执行哪一个{}里面的代码
如果前面的满足了 那么后面的就都不执行了
若干个大括号 最多只能够执行一个
1-4. if(条件1){条件1要执行的代码} else if(条件2){条件2要执行的代码} else{所有的条件都不满足的时候执行的代码}
从第一个开始 满足哪一个条件 执行哪一个大括号里面的代码
前面的满足了 后面的就都不执行了
所有的条件都不满足的时候 执行else里面的代码
若干个大括号 必然会执行其中的一个
案例
//首先弹出一个输入框,要求用户输入一个年份,如果是闰年,就弹出闰年,如果不是闰年,就弹出平年
//什么是闰年:能够被4整除并且不能被100整除的数为闰年 或者能够被400整除的是闰年
//案例分析
//1.弹出一个prompt输入框,让用户输入年份,把这个值取过来保存起来到变量中,
//2.使用if语句判断是否为闰年,如果是闰年,就执行if大括号里面的语句弹出闰年 否则执行else里面的语句弹出平年
//3.一定要注意这里面有逻辑与&& 还有逻辑或||同事判断整除的方法是取余为0
var year = prompt('请你输入年份:');
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
alert('你输入的是闰年');
} else {
alert('你输入的是平年');
}
2.三元运算符
1.三元运算符语法结构: 条件表达式?表达式1:表达式2
2.三元运算符执行思路:如果条件表达式结果为真,就返回表达式1的值 如果表达式结果为假,就返回表达式2
案例
var num = 20;
var result = num < 15 ? '呵呵呵' : '哈哈哈';
alert(result);
3.switch多分支语句
switch语句也是条件分支语句的一种
case 情况1:
情况1执行语句1;
break;
case 情况2:
情况1执行语句2;
break;
case 情况3:
情况3执行语句3;
break;
default:
所有的条件都不满足的时候执行最后的语句;
} 语法结构
switch(要判断的变量){}
案例
var n = 18;
switch (n) {
case 18:
console.log('我已经成年了');
break;
case 17:
console.log('我还是未成年');
break;
default:
console.log('请输入一个数值');
}
console.log('后续代码');
五。循环
1.循环成立的条件
1.初始值 作为循环的开始
2.条件判断 决定要不要继续执行
3.要重复执行的代码
4.改变初始值 为了让循环有结束
2.whlie循环
1. whlie语法
// while 循环
//1. 初始化
var n = 1;
//只要n<=3 得到的结果是true 那么后面的代码就会执行
// 2.条件判断
while (n <= 3) {
// 重复执行的代码
console.log('我错了');
// 改变初始值
n = n + 1;
}
console.log('后续代码')
2.案例:通过循环计算1~10的和
// 1.准备一个变量 用于接收叠加的结果
var sum = 0;
// 2.准备一个循环的初始化变量
var n = 1;
// 3.循环语法
while (n <= 10) {
// console.log(n);
// 4.要重复执行的代码
// 把每一个数字叠加到变量num上
sum += n;
// 5.初始值改变
n++;
}
// 最后输出一下sum 那这个sum就是叠加了所有数字的和
console.log(sum);
3.do whlie循环
1.do whlie语法
// do while
// 也是我们循环语句的一种
// 语法
// do{
// 要重复执行的代码
// }while(条件)
do while 和 while语句的区别
不管条件是不是成立 do while 都会先执行一遍
他们两个只在第一次条件不成立的时候会有区别
案例
// 同样的代码我们使用do while语句执行一下看一下
var n = 8;
do {
console.log('我被执行了');
n++;
} while (n < 10)
console.log('后续代码');
4.for循环
for语法
var i = 0;
for (; i < 10;) {
重复执行的代码
i++
}
案例:打印100小星星
for (var i = 1; i <= 100; i++) { //i index索引号
console.log('☆');
}
5.水仙花数
求水仙花数字
他也叫做三次自幂数 什么叫做三次自幂数
也就是一个数字的每一位的三次方之和,如果和这个数字一样就是三次自幂数
思路
1.循环得到100 ~ 999 的每一个整数
2.把每一个数字都拆开
3.判断是不是三次自幂数
// 1.循环
for (var i = 100; i <= 999; i++) {
// 2.拆数字 举个例子 562
// 拆百位数字
var a = parseInt(i / 100);
// 拆开十位数字
var b = parseInt(i % 100 / 10);
// 拆开个位数字
var c = parseInt(i % 10);
// 3.判断是不是三次自幂数 之前咱们说过一个知识点 a**b 就是a的b次方 所以我们可以将a*a*a 写成a**3
if (a ** 3 + b ** 3 + c ** 3 === i) {
console.log(i + '是三次自幂数');
}
}
打印正三角形案例
核心思路:外层循环跟平常一样写 var i=1;i<=10;i++
内层循环不一样 var j=1;j<=i;j++
var str = '';
for (var i = 1; i <= 10; i++) {
for (var j = 1; j <= i; j++) {
str = str + '★';
}
str = str + '\n';
}
console.log(str);
六。数组
1.数组的使用
1.数组(Array):就是一组数据的集合,存储在单个变量下的优雅方式
2.利用new创建数组
3.利用数组字面量创建数组 []
4.我们数组里面的数据一定要用逗号分隔
5.我们数组里面的数据 比如1 2 我们称为数组元素
6.获取数组元素 格式 数组名[索引号] 索引号从0开始 0 1 2 3
2.数组案例
定义一个数组,里面放置星期一,星期二,星期三,一直到星期日,共
var arr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'];
console.log(arr);
7天,在控制台输出星期日
3.遍历数组:就是把数组中的元素从头到尾访问一次
var arr = ['张三', '李四', '王麻子', '杨洋'];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
4.数组总结
1.什么是遍历数组 :就是把我们的数组从头到尾访问一次,称为遍历
2.通过什么来遍历数组里面的元素:for循环可以实现这个效果
3.for里面的i是什么,当什么使用?for里面的数组元素怎么写:
for里面的i是计算器,当做索引号使用,arr[i]是数组元素第i个数组元素
4.怎么获取数组的长度:length
5.数组索引号和数组的长度的关系:没有关系,数组索引号是从0开始的,数组的长度就是你有多少个元素
比如我有7个数组元素,数组长度就是7,索引号是从0开始的到6 所以他们没有关系
5.数组的最大值
案例
1.声明一个保存最大值的变量max
2.默认最大值就是取数组中的第一个元素
3.遍历这个数组,把里面的每个数组元素和max相比较
4.如果这个数组元素大于max就把这个数组元素保存到max里面,否则继续下一轮比较
5.最后输出这个max即可
var arr = [2, 6, 1, 77, 52, 25, 7, 102, 89, 98, 253];
var max = arr[0];
for (var i = 0; i < arr.length; i++) {
// console.log(arr[i]);
if (arr[i] > max) {
max = arr[i];
}
}
console.log('这个数组的最大值就是:' + max);
6.新增数组元素方法
1. 通过修改length长度 增加空元素
例
var arr = ['关羽', '张飞', '刘备', '诸葛亮'];
console.log(arr.length); //4
arr.length = 7; //把我的数组长度改为7,里面应该有7个数组元素 本来就4个,强制改
成7,就会在原来基础上加上3个空元素
console.log(arr); //['关羽', '张飞', '刘备', '诸亮','empty','empty','empty'];
console.log(arr[4]); //新增的空元素只是声明了,没有给赋值,所以就是undefined
console.log(arr[5]); //新增的空元素只是声明了,没有给赋值,所以就是undefined
console.log(arr[6]); //新增的空元素只是声明了,没有给赋值,所以就是undefined
2.通过修改索引号 追加数组元素 增加或者替换实体元素
例
var arr1 = ['关羽', '张飞', '刘备', '诸葛亮'];
console.log(arr1); //['关羽', '张飞', '刘备', '诸葛亮']
arr1[4] = '赵云';
console.log(arr1); //索引号没出现的叫做追加元素/['关羽', '张飞', '刘备',诸葛亮','赵云']
arr1[5] = '马超';
console.log(arr1); //索引号没出现的叫做追加元素
arr1[0] = '曹操';
console.log(arr1); //索引号出现的叫做替换
arr1 = '三国混战';
console.log(arr1); //千万不要直接给数组名字赋值,否则里面的数组元素都没有了
7.反转数组
//将数组['关羽','张飞','赵云','马超','诸葛亮']的内容反过来存放
// 1.声明一个新数组 newArr
//2.把旧数组的索引号第5个取过来(arr.length-1),给新数组索引号第0个元素(newArr.length)
//3.我们采取递减的方式 i--
var arr = ['关羽', '张飞', '赵云', '马超', '诸葛亮', '曹操'];
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i];
}
console.log(newArr);
七。函数
1.了解函数
1. 在JS里面
函数就相当于一个盒子
用来承载一段代码 当你需要执行这一段代码的时候
只需要呼唤这个盒子就可以了
实际上就是对一段代码的封装
2.函数的概念:
在js里面,可能会定义非常多的相同的代码或者功能相似的代码,这些代码可能需要大量重复使用。虽然for循环语句也能够实现一些简单的重复操作,但是也有局限性,此时我们可以使用js中的函数
函数:就是封装了一段可以被重复执行调用的代码块,
目的:就是让大量代码重复使用
2.函数使用
//函数体验
1.声明函数
function sayHi() { //驼峰命名法
console.log('Hi~~~');
}
//2.调用函数
sayHi();
注意事项:1.function是声明函数的关键字 全部小写
2.函数是做某一件事情,函数名一般是动词 sayHi getSum
3.函数不调用自己不执行 class='box' .box
案例
//利用函数的封装求1-100之间的累加和
//1.声明函数
function getSum() {
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
}
//2.调用函数
getSum();
3.函数参数
在JS里面
函数的参数分为两种
1.形参
=> 写在函数定义阶段的小括号里面
=> 就相当于一个只能够在函数内部使用的变量
=> 起名遵循变量命名规则和规范
=> 值由函数的实参来决定
2.实参
=> 写在函数调用阶段的小括号里面
=> 就是一个准确的值 是为了给函数的形参进行赋值的
->形参和实参 都可以写多个
=> 多个的时候,中间使用逗号(,) 分割
=> 多个的时候, 是按照从左到右的顺序一一对应的 顺序不能够乱
+函数每一次的调用
形参的值都有本次调用的时候传递的实参决定
4.函数总结
函数可以带参数,也可以不带参数
声明函数的时候,函数小括号里面是形参,形参的默认值为undefined
调用函数的时候,函数小括号里面是实参,
多个参数中间使用逗号分隔
形参的个数和实参的个数可以不匹配,结果都不一样,我们尽量要求他们相匹配
5.函数返回值
return
他是函数的返回值 我们也叫做结果
在函数内部使用return关键字
=>return关键字后面的内容
=>就是这个函数的返回值
=>也就是你执行函数后得到的结果
下面我们写一个函数来实验一下
function fn() {
return 123;
}
// 当你调用的fn函数的时候
var res = fn();
// 等这个fn() 函数执行完 这个fn()表达式的结果就是123 我们声明一个变量res接收一下这个fn()表达式的结果
console.log(res);
// 那你在这return的是什么 我们后面res代表的是什么 比如你return true 那最后res代表的就是true 你return的是一个字符串
// 那这里res代表的就是你好 世界
6.arguments参数使用
1.什么是arguments arguments是函数所独有的内置对象 它的展示形式就是一个伪数组
2. 做什么用 里面存放了用户传递过来的所有实参
3.什么情况下使用: 当我们也不知道用户到底传多少个实参的时候,就用arguments
4. 有了arguments,我们不需要再去写形参了,这就是arguments
八。对象
1.了解对象数据类型
1. 对象 也是一个复杂的数据类型 叫做Object
2.对象的创建方式
1.字面量创建
=> var o={}
2.内置构造函数创建
=>JS给我们提供了一个内置构造函数叫做 Object
=> var o=new Object()
3.两种创建对象方式的区别
1.字面量创建可以在创建的同时直接向对象里面添加一些数据
=>数据是以键值对的方式出现的
=>key:value 的形式
=>key就是这个数据的名称
=>value就是这个数据的值
=>多个数据之间使用 逗号 (,)分隔
2.内置构造函数目前我们不好直接添加成员
=>直接创建一个空对象
=>后期我们通过对象的操作语法来进行增删改查
2.利用对象字面量创建对象
1.创建对象
var obj = { //字面量毛豆
uname: '张三丰',
age: 18,
sex: '男',
sayHi: function() {
console.log('你好啊小妹妹');
},
hair: 'white'
};
2.使用函数
(1)调用对象的属性 我们采取 对象名.属性名 .我们理解为的
(2).调用属性还有一种方法 对象名['属性名']
(3)调用对象的方法 sayHi 对象名.方法名() 千万别忘记了添加小括号
3.利用new Object创建对象
示例:
var obj = new Object(); //这里创建一个空对象
obj.uname = '张三丰'; //等分
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
console.log('小可可,要开心');
};
//注意 (1)我们是利用等号赋值的方法 追加对象的属性和方法
// (2)每个属性和方法之间用分号结束
//在调用对象的时候是一样的方法
console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi();
4.利用构造函数创建对象
示例:
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(sang) {
return sang;
}
}
var ldh = new Star('刘德华', 18, '男'); //调用构造函数返回的是一个对象
console.log(ldh);
console.log(typeof ldh);
console.log(ldh.name);
console.log(ldh['sex']);
console.log(ldh.sing('冷冷的冰雨往脸上胡乱地拍'));
5.new关键字的执行过程
1. 遇见new关键字 构造函数可以在内存中创建了一个空对象
2. this 就会指向刚才创建的空对象
3. 执行构造函数里面的代码 给这个空对象添加属性和方法
4. 返回这个对象
new在执行的时候会做四件事情
1.在内存中创建一个空对象
2.让this指向在这个新的对象
3.执行构造函数里面的代码 给这个新对象添加属性和方法
4.返回这个新对象(所以构造函数里面不需要return)
示例:
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(sang) {
return sang;
}
}
var ldh = new Star('刘德华', 18, '男');
console.log(ldh);
console.log(ldh.name);
console.log(ldh['age']);
console.log(ldh.sex);
console.log(ldh.sing('你会不会爱上我'));
6.对象小结
1.对象可以让代码结构更加清晰
2.对象是复杂数据类型Object
3.本质:对象就是一组无序的相关属性和方法的集合
4.构造函数泛指一大类,比如苹果,不管是红苹果还是绿苹果,都统称为苹果
5.对象实例特指一个事物吗,比如这个苹果,
6.for..in 语句用于对对象属性进行循环操作
for(var k in ldh){
console.log(k);
console.log(ldh[k]);
// }
九。内置对象
1.JS创建字符串有两种方式
1.字面量创建
var str = 'hello world';
2.内置构造函数创建
var str=new String('hello world');
2.字符串的常用方法
// 1. charAt() [不常用]
// => 语法: 字符串.charAt(索引)
// => 返回值: 获取该索引位置的字符
// 他分为有和没有 假如一个字符串长度是5 你获取索引位置为3肯定有 你获取索引位置100肯定没有
// -> 如果有该索引位置, 就是索引位置字符
// -> 如果没有该索引位置, 是一个空 照样输出 但是什么也没有
// 2. charCodeAt() [不常用]
// => 语法: 字符串.charCodeAt(索引)
// => 返回值: 获取该索引位置的字符的字符编码(UTF-8编码)
// 因为我们在网页上用的是utf8字符集 我们应该拿的是二进制 但是是以10进制形式输出的 所以最后是十进制表示的字符编码
// 总结:前两种方式不常用 作为了解 因为第二种你想获取某个字符的字符编码基本用不到
// 第一种你想获取字符串里面某一个字符 我们可以通过str[索引] 形式也可以
// 3. substr()
// => 语法: 字符串.substr(开始索引, 截取多少个)
// => 作用: 截取字符串
// => 返回值: 截取出来的字符串
// 4. substring()
// => 语法: 字符串.substring(开始索引, 结束索引) - 包前不包后
// => 作用: 截取字符串
// => 返回值: 截取出来的字符串
// 5. toLowerCase()
// => 语法: 字符串.toLowerCase()
// => 作用: 把字符串里面的大写字母转成小写字母
// => 返回值: 转换好以后的字符串
// 6. toUpperCase()
// => 语法: 字符串.toUpperCase()
// => 作用: 把字符串里面的小写字母转换成大写字母
// => 返回值: 转换好以后的字符串
// 7. replace()
// => 语法: 字符串.replace('要被替换的字符', '替换成的字符')
// => 作用: 替换字符串内的某些字符
// -> 只能替换查找到的第一个 如果找不到要被替换的字符 他就什么也不替换 原样输出就可以了
// => 返回值: 替换好的字符串
// 8. concat() 这个方法和数组同名 字符串也有 这个方法也不常用 因为我用他不如用加号 加号拼接更加好用
// => 语法: 字符串.concat(字符串)
// => 作用: 拼接字符串
// => 返回值: 拼接好的字符串
// 9. slice()
// => 语法: 字符串.slice(开始索引, 结束索引) - 包前不包后
// -> 和 substring 的区别就是可以写 负整数
// -> 当你写负整数的时候, 表示 length + 负整数
// => 作用: 截取字符串
// => 返回值: 截取好的字符串
// 10. split()
// => 语法: 字符串.split('切割符号', 多少个)
// -> 切割符号, 按照你写的符号把字符串切割开 就是分割开
// + 如果不写, 那么就直接切割一个完整的
// + 如果写一个空字符串(''), 按照一位一位的切割
// -> 多少个, 选填, 默认是全部, 表示你切割完以后保留多少个
// => 返回值: 一个数组的形式保存每一段内容
// -> 不管按照什么切割, 返回值一定是一个数组
// 11. indexOf()
// => 语法:
// 1. 字符串.indexOf(字符串片段)
// 2. 字符串.indexOf(字符串片段, 开始索引)
// => 作用: 在字符串里面查找指定字符串片段
// => 返回值:
// -> 如果查询到了, 就是指定索引
// -> 如果没有, 就是 -1
// 跟数组的使用方法差不多 只不过我们数组是查询一个数据 每一个位置就放一个数据 但是字符串你可以查询一个片段
// 12. lastIndexOf()
// => 语法:
// 1. 字符串.lastIndexOf(字符串片段)
// 2. 字符串.lastIndexOf(字符串片段, 开始索引)
// => 作用: 从后向前查找对应的字符串片段
// => 返回值
// -> 如果查询到了, 就是指定索引
// -> 如果没有, 就是 -1
// 13. includes()
// => 语法: 字符串.includes('字符串片段')
// => 作用: 判断字符串里面是否包含该字符串片段
// => 返回值: 布尔值
// -> 有就是 true
// -> 没有就是 false
// 14. search()
// => 语法: 字符串.search('字符串片段')
// => 作用: 查找字符串里面有没有匹配的字符串片段
// => 返回值:
// -> 如果有, 就是指定索引
// -> 如果没有, 就是 -1
// => 和 indexOf 的区别
// 1. 没有第二个参数 只能欧股从左往右开始查找
// 2. search 参数可以写正则(咱们现在还没有学正则 知道就行 之后我们学习的时候再说)
// 15. match() 我们现在学习有点早 基本上用不到这个方法
// => 语法: 字符串.match('字符串片段')
// => 作用: 找到字符串里面的字符串片段
// => 返回值: 是一个数组
// -> 里面是找到的字符串片段
// => 实际应用:
// -> 不是传递字符串
// -> 传递正则
// 比如说你去字符串里面找一个字符 a 他有10个a
// 你只能够找到满足条件的第一个 但是如果你使用正则 就可以找到字符串里面全部的a
// 但是这个方法有一点早 咱们先知道有这么一个东西 以后在细讲
// 16. trim()
// => 语法: 字符串.trim()
// => 作用: 去除首尾空格
// => 返回值: 去除空格以后的字符串
// 17. trimStart()
// => 语法: 字符串.trimStart()
// => 作用: 去除开始的空格
// => 返回值: 去除空格以后的字符串
// => 别名: trimLeft()
// 18. trimEnd()
// => 语法: 字符串.trimEnd()
// => 作用: 去除尾部空格
// => 返回值: 去除空格以后的字符串
// => 别名: trimRight()
// 19. padStart()
// => 语法: 字符串.padStart(目标长度, '填充字符串')
// -> 目标长度: 你想把字符串补充到多长
// + 如果你写的长度小于字符串本身长度, 那么这个函数没有意义
// 比如说这个字符串长度是10 你想要把这个字符串长度补充到5 这是没意义的 只会给你原样输出
// + 超过长度以后, 用填充字符串补齐
// -> 填充字符串: 可以是一个字符, 也可以是多个
// + 多个的时候, 如果超长后面的就不要了
// => 作用: 从前面字符串补齐
// => 返回值: 补齐以后的字符串
// 20. padEnd()
// => 语法: 字符串.padEnd(目标长度, '填充字符串')
// -> 目标长度: 你想把字符串补充到多长
// + 如果你写的长度小于字符串本身长度, 那么这个函数没有意义
// + 超过长度以后, 用填充字符串补齐
// -> 填充字符串: 可以是一个字符, 也可以是多个
// + 多个的时候, 如果超长后面的就不要了
// => 作用: 从后面字符串补齐
// => 返回值: 补齐以后的字符串
// 21. startsWith() 因为我们这个字符串片段可以是一个字母 也可以是两个字母 所以我们写成 starts
// => 语法: 字符串.startsWith('字符串片段')
// => 作用: 判断该字符串是不是以这个字符串片段开始
// => 返回值: 一个布尔值
// -> 如果是, 就是 true
// -> 如果不是, 就是 false
// 22. endsWith()
// => 语法: 字符串.endsWith('字符串片段')
// => 作用: 判断该字符串是不是以这个字符串片段结尾
// => 返回值: 一个布尔值
// -> 如果是, 就是 true
// -> 如果不是, 就是 false
3.Date日期对象
Date日期对象 是一个构造函数 必须使用new 来调用创建我们的日期对象
var arr = new Array(); //创建了一个数组对象
var obj = new Object(); //创建了一个对象实例
4.格式化日期
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
var day = date.getDay();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
console.log('今天是' + year + '年' + month + '月' + dates + '日 ' + arr[day] + hours + '点' + minutes + '分' + seconds + '秒');
5.添加删除数组元素方法
1. push()在我们数组的末尾 添加一个或者多个数组元素 push 推
2. unshift 在我们数组的开头 添加一个或者多个数组元素
3. pop() 他可以删除数组的最后一个元素
4. shift() 他可以删除数组的第一个元素