javascript 基础知识总结(变量 数据类型 函数 对象)

变量

变量的声明

注意:var a = b = c = 9; 相当于var a = 9; b = 9; c = 9;
var a = 9, b = 9, c = 9;相当于 var a = 9; var b = 9; var c = 9;

数据类型

基本数据类型(简单类型,值类型)

存储的是值本身,因此叫做值类型【主要存放在栈】

  • null
  • undefined
  • boolean

false的几种情况:
1、undefined(未定义,找不到值时出现)
2、null(代表空值)
3、false(布尔值的false,字符串"false"布尔值为true)
4、0(数字0,字符串"0"布尔值为true)
5、NaN(无法计算结果时出现,表示"非数值";但是typeof NaN===“number”)
6、“”(双引号)或’’(单引号) (空字符串,中间有空格时也是true)

  • number
  • string

引用数据类型(复杂类型)

存储的仅仅是地址。【主要存放在堆】

栈中间存放的是地址
在这里插入图片描述

通过new关键字创建对象eg:Object,Array,Date

作用域

  • 全局作用域:全局变量
  • 局部作用域:局部变量(函数中没有声明的变量也是全局变量,函数内部的形式参数也可以看作是局部变量)

注意:
在这里插入图片描述
就近原则:先查找当前作用域,发现没有定义num,往上找发现定义为123,所以答案是123,如果123被注释,则继续往上找就是456,456被注释就是not defined

运算符

优先级

在这里插入图片描述

逻辑中断

&& 代码执行顺序从左到右,左边为真 直接以右边值为结果值;
左边为假,右边不执行,直接输出左边值(不管右边是什么,只要左边假右边是式子也不执行了),左右都真输出右边

|| 左边为真,右边不执行,直接输出左边值 左边为假,以右边值为结果值

11&&22//都真 右边 22
11||22// 左真 11
False||11 左假 11

函数

函数的定义

匿名函数

没有函数名的函数

  • 字面量方式定义函数(赋值法定义函数),这种函数的调用是要在函数声明语句后,不能在函数前面进行调用!!!

通过 function 关键词进行定义,其后,括号 (),大括号{}。并赋值给一个变量,此时变量名就是函数名
var 变量名 = function (参数1,参数2,…){ 要执行的代码(函数体) };

  • 第二种匿名函数:

i. 自调用函数(立即执行函数):常用!

(function (参数1,参数2,…){ 要执行的代码(函数体) })(实参);
【避免定义全局变量的时候被污染】一定要有分号!!分号写在前面也行,因为目的就是隔开函数
(function (形参数1,参数2,…){ 要执行的代码(函数体) }(实参));

ii. 事件发生时被调用:

事件= function (参数1,参数2,…){ 要执行的代码(函数体) }
window.οnlοad=function{alert("jai ");} 页面加载结束后执行该函数

iii. 函数中调用:根据函数的性质,在不同位置添加函数,也是未命名函数

setTimeout(function(){alert("jai ");},3000);
计时器函数(需执行的内容,延迟时间ms),在3秒后执行该函数

函数的返回

  1. 在函数体中使用return 关键字能将内部的执行结果交给函数外部使用
  2. 函数内部只能出现1 次 return,并且 return 下一行代码不会再被执行,所以return 后面的数据不要换行写
  3. return会立即结束当前函数
  4. 函数可以没有return,这种情况默认返回值为 undefined

数组

创建数组

a) 隐式创建方式:其实就是内部使用实例化函数创建,只是看不见

var arr=[1,2,"xiao",{},[1,2]]

b) 直接实例化,通过构造函数Array()创建
i. 直接把元素写到括号里面

var arr=new Array(1,2,"xiao",[1,"a"])// 创建一个变量为arr的新建数组

ii. 先创建数组,按下标进行赋值

var arr =new Array();
arr[0]=1; arr[1]=["1",{},1];

iii. 先创建数组,对长度进行初始化,后赋值(数组的长度是可以变化的,所以初始化并不影响)

 var arr =new Array(1);
arr[0]=1; arr[1]=["1",{},1];

数据修改:

根据数组下标进行元素重新赋值

数据增加:

a) 根据数组下标,添加新的元素。
b) 利用数组长度进行添加,因为数组长度始终是下标+1,所以相当于添加一次就是新加一个元素,arr(arr.length)=‘lll‘;
c) 数组.push(新增的内容),将一个或者多个添加到末尾
d) 数组.unshift(新增的内容),将一个或者多个添加到顶部

数据删除

a) 数组.pop ( ),删除末尾的一个
b) 数组.shift ( ),删除顶部的一个
c) 数组.splice ( 下标,几个),删除从下标开始的几个元素

数组排序

升序:arr.sort(function(a,b){
   return a - b;
})
降序:arr.sort(function(a,b){
   return  b - a;
})

数据遍历:

a) For循环遍历:注意可以使用全局变量对数组长度提前获取,防止出现重复获取的情况

b) For-in遍历:(专门用来遍历数组和对象的):for (variable in object) 使用下标,在对象中遍历变量。在所有遍历方式中效率最低
variable:在每次迭代时,variable 会被赋值为不同的属性名。
object:非 Symbol 类型的可枚举属性被迭代的对象。
for ( var l in arr){ document.write(arr[l]+“写作业去”+‘
’);}

c) For-of遍历,一般是对于内容直接进行遍历:
for (var v of arr){document.write(v+“写作业去”+‘
’);}

二维数组:

数组里面的数据还是数组。Arr[数组下标][数组下标中对应的元素下标]
Eg: [0][1]:数组的第一个元素,第一个元素中的第2个元素

二维数组的遍历:和一维数组类似。

for(var i=0;i<length;i++){
				 var yl=arr[i].length;// 获取到数组中元素的长度
				 for(var j=0;j<yl;j++){
					 document.write(arr[i][j] ");
				 } }

冒泡排序

	for (var j=1;j<length;j++){
					for(var i=0;i<length-j;i++){
						 if(shu[i]>shu[i+1]){
							 tmp=shu[i];
							 shu[i]=shu[i+1];
							 shu[i+1]=tmp;
						 }}}

一般开发中使用

数组.sort

升序:arr.sort(function(a,b){
   return a - b;
})
降序:arr.sort(function(a,b){
   return  b - a;
})

对象

内置对象

math

  • Math.random() 函数返回一个浮点数,伪随机数在范围从0 到小于1,也就是说,从 0(包括 0)往上,但是不包括 1(排除 1)
let ram = Math.floor(Math.random() * 6)//随机生成0-5

data

和Math对象不同的是,Date对象是一个构造函数,要通过new来调用创建日期对象(必须要实例化)

const data=new Data()

在这里插入图片描述

  • new Data()获取当前时间
  • new Data('2021-2-2 08:30:00')指定时间
  • toLocaleString()获取年份时间 格式”2023/5/21 00:01:48“
  • toLocaleDateString()获取年份 格式”2023/5/21 “
  • -toLocaleTimeString()获取时间 格式”00:01:48“

对象的定义

  1. 由属性和方法组成
  • 属性:属性名:属性值
  • 方法:方法名:函数
  1. 对象的易变性:对对象进行复制,意思是在内存中对同一个对象进行不同的命名,不会再创建一个副本,所以修改复制后的就意味着修改原来的【因为复制的是地址,所以修改是对原来的对象进行操作】

创建对象

1. json模式创建对象,创建对象用{}号;(最主要的形式)

var a={name:"t",
age:23,
weight:"45kg", 
skills: function () {
	        console.log('bark');
	        console.log('showFilm');
	    }};

2. 直接实例化,通过new object创建

var a=new Object ();
a.name="t";
a.age=23;
对象的创建还可以使用方法:
Sin:function(){} //方法名:函数
访问需要直接调用该方法
a.sin()//对象名.属性名()

3. 构造函数创建对象 将其封装到一个函数

//构造函数创建对象
	function 构造函数名() {
	    this.属性名 = 属性值;
	    this.方法名 = function() {}
	}
	// 调用
	new 构造函数名();

案例:

function obb(name,age,sex){
				this.name=name;
				this.age=age;
				this.sex=sex;
				this.still=function(a){
					console.log(a)
				}
			}
			let min=new obb('tang',24,"女")//这里的new很重要!!要new才能创建
			min.still("造飞机")//对象中的函数,是需要调用创建的
			console.log(min)

对象的增删改

删除:

  • 使用delete进行删除,是将属性名和属性值都删除掉了

Delete 对象.属性;

添加

  • 对象名[“属性名“];
    a["name"]=“yyt“;
  • 对象名.属性名;(常用)
    a.age=12;

修改

  • 直接使用访问,修改属性值,对其进行重新赋值;

对象的遍历

for in 【For-in 循环:会对每个属性执行一次,不用单独写属性,for(属性名 in 对象){输出内容}//这里的属性名可以随意设置成其他变量,因为他代表的是所有的属性名】

	for(i in a){
				document.write("我的",i,"是",a[i],"<br>");//i是变量,不用"",使用引号就变成了访问对应的属性;
			}
			//在for...in 语法中,对象的属性值需要通过 中括号语法才能取出对象的属性值

调用对象

  1. 使用对象名.属性名;;
var c =a.age;
  1. 使用对象名[‘属性名’];
var c =a["name"];//需要找的时候是字符串需要用引号引起来
  1. 调用对象内的方法:对象名.方法名();
let per = {
       speak: function () {
           console.log("shuohua");
       }
       ,
       eat: function (a) {
           console.log(`我吃${a}`);
       }
   }
   per.speak();//shuohua
   per.eat("栗子");//我吃栗子
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值