js基础(1)~数据类型,运算符,结构语句,array,object,

1,js基础

javascript,简写为js,是一种函数式、弱类型的脚本语言。
在一个网页中:

HTML负责页面中有什么。
CSS负责页面长什么样子。
JS负责页面能够干什么。
JS能够控制HTMLCSS

js在页面中运行有两种方式:

  1. 直接在script标签中写js代码。
  2. 引用外部js文件。Src属性填写的是外部js文件的绝对路径。
<script src="name.js"></script>
控制台输出:Console.log。
赋值:从右往左赋值,等号右边的值赋值给左边。

一个页面中是可以关联多个script标签,代码会按照先后顺序执行。

2,变量和js数据类型

2.1,变量

js变量:存储数据的"容器"。

  1. 使用 var 关键词来声明变量.
var  myAge = 31;
/*
  var xxx声明一个变量,
  =表示赋值运算符,作用是把=右边的值赋给左侧的变量。
*/
  1. 在es6之后,可以使用 let 和 const 关键词来声明变量。
let name = "小明";
const stature = 1.7;

var,let,const的区别

  • var声明变量存在变量提升,let和const不存在变量提升。
    变量提升:变量可以先使用再声明。
  • let、const都是块级作用域变量。
    块级作用域:只在当前代码块起作用.
  • const声明的变量不可修改,(指常量对应的内存地址不可修改,而不是对应的值不可修改)

2.2,js数据类型:

js中数据类型分为2种:
1,基本数据类型;字符串类型,数字类型,布尔类型
2,引用数据类型:凡是对象都是引用类型,

基本数据类型与引用数据类型的区别:
基本数据类型保存的是值,引用类型保存的是内存地址。

数据类型:number,用于记录一个数字,直接输入数字。

var num = 30.5; 

字符串类型:string,用于记录一段文本,使用双引号包括,也可以使用单引号定义。

var str = "20";   str = '大龙';

布尔类型:boolean,用于记录一个真假值(是否)。true为真,false为假。

var flag = true; 

3,基本运算符

四则运算符:+号:可以用于数字相加。

var num =1+2+3;
console.log(num);  //6

变量也可以通过表达式计算。

var num2 =num+num;

当用+号链接字符串时,代表字符串拼接。例如:

var s1 ="a";
var s2 ="b";
var s3 =s1+s2; //s3 = 'ab'

当数字和字符串进行相加时,代码会自动将数字转换为字符串,并与另一个字符串进行拼接,组成新的字符串。

var s4 ="3"+5;
console.log(s4); //35
-号:减号,两个数相减。例如:
var num3 =5-2;
console.log(num3); //num3 = 3

当参与运算的两个值其中只要有一个是字符串时,代码会将字符串转换为数字,然后进行数学相减(前提是字符串里面的内容可以转成数字)。例如:

var num4 ="5" -3;
console.log(num4);=2

*号:乘号,两数相乘。不同的运算拥有不同的优先级,乘法运算的优先级大于加减。
当字符串参与乘法运算时。和减号遵循的规则一样,

/号:除号:和乘法运算规则一样,
%号:取余运算符:两个数字整除之后的余数,

var num7 =5%3;
console.log(num7); //2

++和–:自加1和自减1,
++写在变量后,代表变量先参与表达式计算,后自增
++写在变量前,表示先自增,后参与表达式计算

var num8 =5
var num9 =num8++;
console.log(num8,num9);num8 =6;num9 =5
// 逻辑和++相同,
var num10 =num9--;
console.log("???"+num9,num10);num9 =4;num10 =5
其他运算符
// +=表示自增运算 同样还有-=,*=, /=。
var num11 =10;
num11+=5;(numll=numll+5;
console.log(num11);

4,布尔运算符

&&表示和运算,当运算符两侧的布尔值都为真时,结果才为真

var f1 =false&&true;
console.log(f1);  //false

||表示或运算,规则是:如果第一个运算子的布尔值为true,则返回第一个运算子的值,且不再对第二个运算子求值;如果第一个运算子的布尔值为false,则返回第二个运算子的值。

var f2 =true||false;
console.log(f2);  //true

!表示非运算,是一个单目运算符,对布尔值进行取反,假的取真,真的取假。
非运算的优先级大于和与或。

var f3 = !true;
console.log(f3);  //false

5,比较运算符

var a =6; var b =5;
// 两个变量进行比较,会得到一个布尔值的结果,不等式成立时为true 不成立则为false
// <小于(左侧小于右侧), >大于
var f1 =a<b;
// >=大于等于 <=小于等于 规则和大于小于一样
var f2 = a>=b;
// !=不等于
var f3 = a!=b;

比较运算符会组成一个表达式,无论这个表达式有多长,系统再去运行的时候始终会把该表达式的结果以一个bool值来返回出来。

6,结构语句

代码执行顺序是从上往下依次执行代码。
分支结构:决定哪一部分代码执行哪一部分代码不执行。
循环结构:让哪一部分代码执行对应的次数。

6.1,if分支结构

if语句:if代表如果 (内部是条件表达式){满足表达式才会执行的代码}
else语句:else{代码块}。
执行规则:当if括号内的布尔值为true时,执行if{}的代码 否则执行else{}的代码。

if搭配else必有一者执行 多个if有可能执行也有可能不执行;
if和else是可以连续使用的。
else if:或者如果。

let num = 5;
if(num > 3){
    console.log('num--666')
}else if(num = 5){
    console.log('six-six-six')
}else{
    console.log("百鸟朝凤")
}
//num--666

6.2,非布尔值当做布尔值使用

If判断,判断的条件需要写布尔值或者是布尔表达式才可以。

  • 如果把非布尔值写入if条件中,程序执行的时候这个值会强制转换为布尔值使用。
  • 如果把数字类型作为布尔值使用,那么0为flase,其余都是true。
  • 如果把字符串类型作为布尔值使用,空字符串为flase,非空为true。
  • 如果把对象作为判断条件来判断,只要是对象有内存,结果就是true。
  • Null:代表当前要读取的内容读不到,也是flase。
  • 如果参数的值为NAN,或者是字符串,对象,undefined等非数字值读不出来,则使用专门的函数进行判断。

isNAN函数:进行变量判断,满足返回true。用来检测变量是否,是,非数字值。

if (Number.isNaN(v2)==true) {
        console.log("读不出来");
    }

对非布尔值使用逻辑运算符,会把非布尔值先转成布尔值在计算。

let s1 = 45
    console.log(!!s1);   //true

6.3,while循环结构

格式:while(布尔条件){循环体}。
执行规则:
1.判断布尔条件,如果为假直接跳出循环 如果为真则执行循环体
2.循环体执行一遍之后回到第1步

do while循环:
先执行一遍do里面的内容然后去看判断条件是否满足 如果满足继续走do 不满足则结束
var sum =0;
do{  sum++;console.log(sum);}while(sum<10)
//1-10

6.4,for循环

格式:for(循环控制变量赋值;循环的条件;循环控制变量修改){循环体}
执行规则:
1,执行初始循环控制条件变量赋值
2,判断循环控制条件是否满足,如果不满足则直接退出循环,如果满足则执行循环体。
3,当循环执行完毕后,执行循环控制变量修改,然后回到第二步

// 循环体内,可以使用循环来控制变量
// i代表循环的值 i
//循环嵌套:一个循环内部可以写另一个循环
for(var i=0;i<10;i++){
	for(var j=0;j<10;j++){
		console.log(i+""+j);
	{
}

循环退出:
contince:立刻结束循环体执行,执行循环控制变量更改,然后在重新进入条件判断,
break:用于退出当前循环。

contince和break的区别:
1,contince是跳过本次循环,继续执行下一次的循环。break是直接结束循环。
2,嵌套循环break一次调不出来,如果需要跳出外层的循环 可以给外层循环起个名字,在break后面追加该名字就行。

6.5,js中的=、==和===的区别

=是赋值运算符,
==是判断值是否相等,
===是判断值和类型是否相等(先比较值,后比较类型)。

7,数组(array)

array:存储多个同类型的数据,数组是引用类型。
创建数组:

//1.使用new关键字
var nameList = new Array();
//2,使用[]字面量。
var nameList = [];

数据在array中以索引(序号)进行存储,数据在数组中是有序的。可以通过索引访问数组中的数据,索引是从0开始的。

var arr = [1,2,3];
console.log(arr[0])  //1

数组也是一种对象。所以数组也有属性,其中length属性表示数组的长度,也就是数组中元素的个数。

 var arr = [1,2,3];
console.log(arr.length)   //3

7.1,数组常用的方法

arr[0]使用索引对数组里面的元素进行读与写。

  1. push方法用于向数组的最后追加一个元素。
    var arr = [1,2,3];
    console.log(arr[0])   //3
    arr.push(4);
  1. pop用于删除数组中最后一个元素,返回值是删除的这个元素。
    var arr = [1,2,6];
    console.log(arr.pop())  //6

数组中的push和pop是一对栈(stack)。栈是一个线性数据结构,只有一个入口同时也是出口,先进后出,后进先出

  1. unshift:将一个元素添加到数组的最前端。
    var arr = [1,2,6];
    arr.unshift('a')
    console.log(arr)   //[ "a", 1, 2, 6 ]
  1. shift:从数组最前端删除一个元素,返回值也是删除的元素。
    var arr = [1,2,6];
    console.log(arr.shift()) //1

Shift和unshift也是一对栈操作。Push和shift是一对,队列(queue)操作。队列是一种线性的数据结构,先进先出,后进后出

  1. splice:有3个参数,用来向数组中添加或者是删除元素:
1参(第一个参数):从哪个位置开始删(根据索引)2参:删除几个元素,
3参:删除之后替换新的元素
前两个参数是必须的,后面的都是可选的
    var arr1 = ['a','b','c'];
    arr1.splice(2,1,99,88);
    console.log(arr1)   //[ "a", "b", 99, 88 ]
  1. reverse:用于将数组中的元素顺序反转::
var arr1 = ['a','b','c'];
    arr1.reverse()
    console.log(arr1)  //[ "c", "b", "a" ]
  1. slice:用于数组截取,有2个参数。

1参:从哪个位置开始截取(包含)
2参:截取到哪个位置(不包含当前位置元素),把截取的内容返回到新数组上,原数组不变。
如果不写第二个参数,则截取到最后。
如果第二个参数写-n ,则表示截取到倒数第n个。

    var arr1 = ['a','b','c','d','e'];
    console.log(arr1.slice(1,3))   //[ "b", "c" ]
  1. indexof:获取元素第一次在数组中出现的索引,如果不包含则返回-1。
var arr1 = ['a','b','c','d','e'];
   console.log(arr1.indexOf('c'))  //2
   console.log(arr1.indexOf('w'))  //-1
  1. join:将数组的内容拼接成一个字符串。
var arr1 = ['a','b','c','d','e'];
    var str = arr1.join('')
    console.log(str)  //abcde

8,字符串对象

  1. 字符串.startsWith:判断本字符串是否以参数字符串开头,返回值是一个布尔值,如果是则返回true,不是返回false。
  2. 字符串.endsWith() :判断本字符串是否以另一个字符串结尾。
  3. 字符串.length 表示本字符串中字符的个数(长度)。
  4. 字符串.substr() 方法,用于字符串截取,

1参:从第几个字开始截,
2参:截多少个字,
返回值就是截取到的新字符串。如果没有传递第二个参数,则截取到字符串末尾。

  1. 字符串.substring() 方法,字符串截取,

1参:从第几个字开始截(含),
2参:截取到第几个字(不含)。

substr和substring的区别

相同点:只有一个参数时,两者都是截取字符串从当前下标以后,到字符串最后的字符串片段

let str = 'abcdefgh'
    console.log(str.substr(3))  //defgh
    console.log(str.substring(3))  //defgh

不同点:有2个参数时:
substr(satrt,end): 第二个参数是截取字符串的长度(从起始点截取end长度的字符串);
substring(satrt,end): 第二个参数是截取字符串最终的下标 (截取2个位置之间的字符串,‘含头不含尾’)。

let str = 'abcdefgh'
    console.log(str.substr(2,5))    //cdefg
    console.log(str.substring(2,5))  //cde
  1. 字符串.split(分隔符)

用于字符串分隔,参数是分隔符,返回值是一个数组,数组中包含了分隔之后的所有字符串。
1,如果分隔符是空字符串,则会将字符串的每个字符分开。

let str = 'abcde'
    console.log(str.split(''))  //Array(5) [ "a", "b", "c", "d", "e" ]

2,如果不填写分隔符参数,则返回数组中是原字符串.

let str = 'abcde'
    console.log(str.split()) //Array [ "abcde" ]
  1. 检测当前字符串是否包含有目标字符串,返回bool值,true代表包含
let str = "abc123qwertyu"
    ind =str.includes("23q");
    console.log(ind);  //true

8.valueof是字符串的方法,作用是取出来传递进去的字符串值。本方法对数字类型,布尔类型也能用。

var strObj =new String("123");
var str2 =strObj.valueOf();
console.log(str2);   //123

9,函数

funtion:声明一个函数,
格式:funtion 函数名(参数列表){函数体},

function people(name, age, sex) {}

函数调用格式为:函数名(实参列表)。
实参:实际的参数。

 people("小明", 30, true);

调用函数时,函数的函数体内代码会被执行,函数中的参数值就是本次调用所传递进去的,
参数值,函数调用本身也是一个表达式,表达式的值就是函数的返回值,
函数的作用域

作用域:每一个参数都有一个作用范围,超过范围就失效,这个范围就叫作用域。

10,对象

10.1,对象基础

对象:把变量,函数整合到一起的一个复杂的数据类型。
对象的三大特征:封装,继承,多态。
1,创建对象

  • new:开辟内存,Object()构造对象的函数。对象的声明和实现可以写在一起。
let obj = new Object();
  • 对象也可以使用字面量创建法来创建
var obj3 = {
   // 字面量创建的时候属性与属性之间要用,分割
   name: "大哥",
   major: "学生",
}

2,属性赋值
属性赋值和常规变量赋值一样,调用的时候只需要对象.属性名。

obj.age = 20;
obj.sex = "男";
//调用时
console.log(obj.age);  //20

10.2,Object.defineProperty

Object.defineProperty方法:为一个对象定义一个属性。方法有3个参数:
1参:添加属性的对象。
2参:添加的属性名
3参:属性的配置对象

Object.defineProperty(o,"p1",{
	// 属性的初始值
	value:"v1",
	// 属性是否可读写,默认为false,
	//如果是false则为只读属性
	writable:true,
	// 属性是否可枚举(可遍历),默认为false
	enumerable:true
});

Object.defineProperty方法可以为对象添加set/get属性,
1,当为这个属性赋值时,本质上是执行了这个属性的set方法,所赋的值会作为参数传入set方法
2,获取这个属性时,本质上是调用了get方法,并获取它的返回值。

Object.defineProperty(o2,"age",{
	get(){
		// console.log("get方法被调用了");
		return this._age;
	},
	
	set(v){
		// console.log("set方法被调用了");
		// console.log(v);
		// 对象属性的set/get方法中的this就是对象本身。
	}
});

//set/get属性,相比普通的属性:
1,可监听。
2,可限制。

3,方法调用
当对象的属性后面的赋值变成了函数的时候,那么这个属性叫做对象的方法。调用:对象.方法名。

let obj = new Object();
 obj.eat = function () {
        console.log("今早吃了五个肉包子");
    }   
    //调用时
    obj.eat();

4,属性删除

格式:delete 对象.属性

5,属性访问
5.1,对象.属性,
对象就是一个容器,数据在对象中以键值对的形式出现。在下面对象man中:name就是键,大哥就是值。
5.2,对象[“键”],
对象的另一种访问方式:根据键来取值,[]内部要用双引号来包裹键名称。

 var man = new Object();
    man.name = "大哥";
	man.age = 1;
	//取值时
	console.log(man.age);  //1 
	 console.log(man["name"]);  //大哥 

对象的属性还可以是一个对象。

//对象属性的快递遍历
Forin循环:专门用来做对象属性的遍历,key代表一个空属性。
把obj上面的属性赋值给key
for (var key in obj) {
	//其他的逻辑
}

②getPrototypeOf()获取某个对象的原型
③setPrototypeOf()设置某个对象的原型
④hasOwnProperty()判断对象是否含有某个属性

10.3,封箱(装箱)操作

当使用基本数据类型调用方法的时候,js执行器就会根据这个类型临时的创建出一个对应的对象,用于封装这个基本数据类型。当使用这个基本数据类型调用方法时,实际上是系统预先设置的对象所提供的方法,用完之后会把这个对象自动释放掉,变成最初的值,这个过程叫封箱操作,作用是减轻程序员的负担。

10.4,Math对象:

Math对象,js内置对象的一个对象,内置对象的出现主要就是为了解决某种单一的功能。
(1)math对象常用的方法

  1. 数字比较。
math.max比大
console.log(Math.max(5,3));
math.min比小

四舍五入取整
console.log(Math.round(3.5));
向下取整
console.log(Math.floor(3.5));
向上取整
console.log(Math.ceil(3.5));
随机数
console.log(Math.random());
  1. math对象的其他方法
  • 圆周率(做圆周动画的时候需要使用):Math.PI。
console.log(Math.PI);

自然对数:Math.E
console.log(Math.E);
计算一个数的绝对值
onsole.log(Math.abs(-4));
幂运算,计算x的y次方
console.log(Math.pow(x,y));
开平方
console.log(Math.sqrt(25));
开多次方
console.log(Math.pow(27,1/3));
三角函数,正弦函数。30代表角度(编程语言中只能识别弧度,所以传入角度得到弧度)
console.log(Math.sin(30*Math.PI/180));
// Math.cos余弦  Math.tan 正切 Math.cot余切
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值