1.变量
//1.弹出一个输入框,提示用户输入姓名;
var uname = prompt('请输入您的姓名');
//2.弹出一个对话框,输出用户刚才输入的姓名;
alert(uname);
2.数据类型
-
JS把数据类型分为两类:
- 简单数据类型(Number,String,Boolean,undefined,Null)
- 复杂数据类型(Object)
数字型 Number
1.八进制 0~7 我们程序里面数字前面加0 表示八进制
var num = 010;
console.log(num);//010 八进制 转换为 10进制 就是 8
2.十六进制 0~9 a~f #ffffff 数字的前面加 0x 表示十六进制
var num = 0x9;
console.log(num);//0x9 十六进制 转换为 10进制 就是 9
var num1 = 0xa;
console.log(num1);//0xa 十六进制 转换为 10进制 就是 10
3.数字型的最大值
console.log(Number.MAX_VALUE);
4.数字型的最小值
console.log(Number.MIN_VALUE);
5.isNaN()这个方法用来判断非数字,并且返回一个值,是数字返回false,反之true
console.log(isNaN(12));//false
数据类型转换
-
toString():
var num = 1; console.log(num.toString());
-
String()强制转换
var num = 1; console.log(String(num));
-
加号拼接字符串(和字符串拼接的结果都是字符串)
var num = 1; console.log(num+'我是字符串');
**转换为字符串
-
parseInt(string)函数:
//将string类型转成整数数值型 parseInt('78');
-
parseFloat(string)函数:
//将string类型转成浮点数数值型 parseFloat('78.21');
-
Number()强制转换函数
Number('12')
-
js隐式转换(- * /)
//利用算术运算隐式转换为数值型 ‘12’-0
**转换为数字型(重点)
-
Boolean()函数:
//其他类型转成布尔值 Boolean('true')
- 代表空,否定的值会被转换为false,如'',0,NaN,null,undefined
- 其余值都会被转为true
**转换为布尔型
3.操作符
4.流程控制
5.循环
6.数组和冒泡排序
7.函数及应用
8.作用域及预解析
9.对象
10.内置对象
JavaScript 中的对象分为3种:自定义对象,内置对象,浏览器对象
前面两种是 JS基础内容,属于ECMAScript;第三个浏览器对象属于我们JS独有的
内置对象就是指JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
* Math 数学对象不是一个构造函数,所以我们不需要new 来调用,而是直接使用里面的属性和方法
console.log(Math.PI);//一个属性 圆周率
console.log(Math.max(1,99,8));//99
console.log(Mact.max(1,99,'pink'));//NAN
console.log(Math.max());//-Infinity
console.log(Math.abs());//绝对值
console.log(Math.abs(1));//1
console.log(Math.abs(-1));//1
console.log(Math.abs('-1'));//隐式转换 会把字符串型 -1 转换为数字型
console.log(Math.abs('pink'));//NAN
console.log(Math.floor());//向下取整
console.log(Math.floor(1.1));//1
console.log(Math.floor(1.9));//1
console.log(Math.ceil());//向上取整
console.log(Math.ceil(1.1));//2
console.log(Math.ceil(1.9));//2
console.log(Math.round());//四舍五入版 就近取整 注意 -3 5 结果是-3
console.log(Math.round(1.1));//1
console.log(Math.round(1.5));//2
console.log(Math.round(1.9));//2
console.log(Math.round(-1.1));//-1
console.log(Math.round(-1.5));//-1
案例:利用对象封装自己的数学对象 里面有PI 最大值和最小值
var myMath = {
PI:3.141592653,
max:function(){
var max = arguments[0];
for(var i = 1;i<arguments.length;i++){
if(arguments[i]>max){
max=arguments[i];
}
}
return max;
},
min:function(){
var min = arguments[0];
for(var i = 1;i<arguments.length;i++){
if(arguments[i]< min){
min=arguments[i];
}
}
return min;
}
}
console.log(myMath.PI);//3.141592653
console.log(myMath.max(1,5,99));//99
console.log(myMath.min(1,5,99));//1
* random()随机数方法返回一个随机的小数[0,1)能取到0,不能取到1,这个方法里面不跟参数
案例:得到两个数之间的随机整数,并且包含这2个整数
//Math.floor(Math.random()*(max-min+1))+min;
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(1,10));
案例:随机点名
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
var arr = ['张三','卡利斯','lil','tantang','mumu'];
console.log(arr[getRandom(0, arr.length-1)]);
案例:猜数字游戏
//随机生成一个1-10之间的数字,并让用户输入一个数字
//1.如果大于该数字,就提示,数字大了,继续猜
//2.如果小于该数字,就提示数字小了,继续猜
//3.如果等于该数字,就提示猜对了,结束程序
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1, 10);
var cc = 0
while (cc<3) {
cc++;
var num = prompt('你来猜?输入1-10之间的一个数字');
if (num > random) {
alert('你猜大了');
} else if (num <random) {
alert('你猜小了');
} else if(cc===3){
alert('不好意思,3次你都猜错了哦');
} else {
alert('你好帅哦,猜对了');
break;//退出整个循环结束程序
}
}
* Date() 日期对象是一个构造函数 必须使用new 来调用创建我们的日期对象
//Date() 日期对象 是一个构造函数 必须使用new 来调用创建我们的日期对象
var arr = new Array();//创建一个数组对象
var obj = new Object();//创建了一个对象实例
//1.使用Date
var date = new Date();//没有参数,返回当前系统的日期
//2.参数常用写法 数字型 2019,10,01 或者是 字符串类型 ‘2019-10-1 8:9:0’
var date = new Date(2019,11,21);//返回的是12月,不是11月
var date = new Date('2019-11-21');//没有参数,返回当前系统的日期
案例:格式化日期 年 月 日
var date = new Date();
console.log(date.getFullYear());//返回当前日期的年 2019
console.log(date.getMonth()+1);//月份,返回的月份小1个月,记得月份+1 哟
console.log(date.getDate());//返回的是 几号
console.log(date.getDay());//3 周一返回的是1 周六返回的是6 但是周日返回的是 0
//写一个 2019年5月1日 星期三
var year = date.getFullYear();
var month = date.getMonth()+1;
var dates = date.getDate();
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
var day = date.getDay();
console.log('今天是:'+year+'年'+month+'月'+dates+'日'+arr[day]);
11.简单类型和复杂类型
11.1.基本包装类型
为了方便操作基本数据类型,javaScript还提供了三个特殊的引用类型:String,Number和Boolean
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法
//下面的代码有什么问题?
var str = 'andy';
console.log(str.length);
//对象才有属性和方法,复杂数据类型才有属性和方法
//简单数据类型为什么会有length属性呢?
//基本包装类型:就是把简单数据类型 包装成为了复杂数据类型
//其执行过程如下:
//1.生产临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
//2.赋值给我们声明的字符变量
str = temp;
//3.销毁临时变量
temp = null;
11.2.字符串的不可变性
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间;
var str = 'andy';
str = 'bibi';
//当重新给str赋值的时候,常量'andy'不会被修改,依然在内存中
//重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
//由于字符串的不可变,在大量拼接字符串的时候会有效率问题
var str = '';
for(var i = 0;i<10000;i++){
str +=i;
}
console.log(str)
//这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间
11.3.根据字符返回位置
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串;
//字符串对象,根据字符返回位置, str.indexOf('要查找的字符',[起始的位置])
var str = '情深深雨蒙蒙';
console.log(str.indexOf('雨'));
console.log(str.indexOf('深',2))//从第二个位置开始找
案例:返回字符位置
查找字符串'abcodejpodeodedwo'中所有的o出现的位置与次数
//核心算法:先查找第一个o出现的位置
//然后只要indexof 返回的结果不是-1 就继续往后查找
//因为indexof 只能查找到第一个,所以后面的查找,一定是当前索引+1,从而继续查找
var str = 'abcodejpodeodedwo';
var index = str.indexOf('o');
var num = 0;
while(index !==1){
num++;
index = str.indexOf('o',index+1);
}
11.4.根据位置返回字符(重点)
1⃣️charAt(index): 返回指定位置的字符(index字符串的索引号)
//str.charAt(0)
//1. charAt(index) 根据位置返回字符
var str = 'andy';
console.log(str.charAt(0));//a
//2.遍历所有的字符
for(var i =0;i < str.length;i++){
console.log(str.charAt(i));
}
2⃣️charCodeAt(index): 返回相应索引号的字符ASCII值 目的:判断用户按下了那个键
var str = 'andy';
console.log(str.charCodeAt(0));//97
3⃣️str[index]: H5新增的,IE8+支持和charAt()等效
var str = 'andy';
console.log(str[0]);//a
案例:统计出现最多的字符和次数
查找字符串'abcodejpodeodedwo'中所有的o出现的位置与次数
//有一个对象,来判断是否有该属性 对象['']
var o = {
age:18
}
if(o['sex']){
console.log('里面有该属性');
}else{
console.log('没有该属性');
}
//判断一个字符串'abcjdhuhdhdhodhsjodhdhso'中出现次数最多的字符,并统计其次数。
//核心算法:利用charAt()遍历这个字符串
//把每个字符串都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
//遍历对象,得到最大值和该字符
var str = 'abchushdsudggygdyegysfgsgshgsdgs';
var o={}
for(var i = 0;i<str.length;i++){
var charts = str.charAt(i);//charts 是字符串的每一个字符
//o[charts] 得到的是属性值
if(o[charts]){
o[charts]++;
}else{
o[charts]=1;
}
}
console.log(o)
var max=0;
var ch = '';
//遍历对象
for(var k in o){
//k 得到的是属性名,
//o[k] 得到的是属性值
if(o[k]>max){
max=o[k];
ch =k;
}
}
console.log('出现的次数'+max)
console.log('最多的字符是'+ch)
11.5.字符串操作方法(重点)
1⃣️concat(str1,str2,str3):用于连接两个或多个字符串,拼接字符串,等效于+,+更常用
var str = 'andy';
console.log(str+'vivi');//andyvivi
2⃣️substr(start,length):从start位置开始(索引号),length 取的个数-重点记住这个
var str1 = '改革春风吹满地';
console.log(str1.substr(2,2));//春风
3⃣️slice(start,end):从start位置开始,截取到end位置,end 取不到(他们两都是索引号)
4⃣️substring(start,end):从start位置开始,截取到end位置,end 取不到,基本和slice相同,但是不接受负值
5⃣️替换字符 replace('被替换的字符','替换为的字符') 它只会替换第一个字符
var str1 = 'andy';
console.log(str1.replace('a','b'));//bndy
//有一个字符串'sdshdshdshdhshs' 要求把里面所有的s 替换为*
var str = 'sdshdshdshdhshs';
while(str.indexOf('s') !==-1){
str=str.replace('s','*')
}
console.log(str);
6⃣️字符转换为数组 split('分隔符')---join 把数组转换为字符串
var str ='red,pink,blue';
console.log(str.split(','));//["red", "pink", "blue"]
var str ='red&pink&blue';
console.log(str.split('&'));//["red", "pink", "blue"]
11.6.简单类型与复杂类型
11.61简单类型:基本数据类型或者值类型放到栈里面
- 值类型:简单数据类型/基本数据类型,在存储临时变量中存储的值是本身,因此叫做值类型 string, number, boolen, undefined, null
//简单数据类型 null返回的是一个空的对象 object
//如果有个变量我们以后打算存储为对象,暂时没有想好放啥,这个时候就给null
var timer = null;
console.log(typeof timer);
11.62复杂类型:引用类型放到堆里面
- 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此就叫做引用数据类型 通过new 关键字创建的对象(系统对象,自定义对象),如Object, Array, Date等
11.7.堆和栈
堆栈空间分配区别:- 1.栈(操作系统):存放简单数据类型,由操作系统自动分配释放存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈
//简单数据类型 是放在栈里面 里面直接开辟一个空间存放的是值
//复杂数据类型 首先在栈里面存放地址 十六进制表示 然后这个地址指向堆里面的数据
11.8.简单数据类型传参
函数的形参也可以看作是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,
其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量;
function fn(a){
a++;
console.log(a);//11
}
var x =10;
fn(x);
console.log(x)//10
11.9.复杂类型传参
函数的形参也可以看作是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,
其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象;
function Person(name){
this.name=name;
}
function f1(x){
console.log(x.name);//刘德华
x.name = '张学友';
console.log(x.name);//张学友
}
var p = new Person('刘德华');
console.log(p.name);//刘德华
f1(p);
console.log(p.name);//张学友