JavaScript 基础概念

JavaScript组成

  • ECMAScript:JavaScript语法标准
  • DOM:文档对象模型
  • BOM:浏览器对象模型

特性

  • JavaScript 对大小写是敏感的。
  • JavaScript 使用 Unicode 字符集。

数据

代表了特定的信息
特点:可传递(基本数据被赋值会直接复制一个一模一样的数据),可运算
内存中所有的操作目标都是数据
js调用 函数时传递变量参数时是(看理解)

  1. 都是值(基本/地址值)传递
  2. 可能是值传递,也可能是引用传递(地址值)

基本数据类型(5+2种)

  • 字符串(String)
  • 数字(Number)
  • 布尔(Boolean)
  • 对空(Null)
  • 未定义(Undefined)
  • Symbol(Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。)
  • bigInt(大整数,ES6引入)

注释:

  • 参数赋值传数值
  • null和undefined中没有任何方法
调用方法时的过程

对于str.toUpperCase()

  1. 字符串 str 是一个原始值。因此,在访问其属性时,会创建一个包含字符串字面值的特殊对象,并且具有可用的方法,例如 toUpperCase()。
  2. 该方法运行并返回一个新的字符串(由 alert 显示)。
  3. 特殊对象被销毁,只留下原始值 str。

虽然创建了特殊对象,但是实际上仍比对象类型更加轻量级

引用数据类型

  • 基本
    • 对象(Object)(剩下其他类型都是object)
    • 数组(Array)
    • 函数(Function)
  • 特殊
    • 正则(RegExp)
    • 日期(Date)

注释:

  • 参数赋值传地址
  • JavaScript的对象可以认为是键值对的集合
对象的方法定义
<script>
var person = {
    firstName: "John",
    lastName : "Doe",
    id : 5566,
    //对象方法作为一个函数定义存储在对象属性中。
    fullName : function() {
       return this.firstName + " " + this.lastName;
    }};
document.getElementById("demo").innerHTML = person.fullName();
</script>

内存

内存条=》通电=》产生内存空间=》存储数据=》处理数据=》断电=》内存和数据都消失
内存生命周期

  • 分配内存空间,获得使用权
  • 存储数据,可以反复操作
  • 释放内存空间

释放内存

  • 局部变量:函数执行完自动释放
  • 对象:变成垃圾对象=》垃圾回收器回收

变量

可变化的量,由变量名和变量值组成
每个变量对应一块内存,变量名用来查找内存,变量值就是内存中的数值

数据、变量、内存的关系

内存用来存储数据的空间
变量是内存的标识

基本数据类型和引用数据类型区别

  • 栈内存和堆内存(内存分配)
    • 基本数据类型的值在栈内存中独立存放
    • 引用数据类型的值再堆内存中存档,指向改地址的指针存放在栈内存中
  • 访问机制
    • 基本数据类型会直接访问
    • 引用数据对象需要先得到在堆内存中的地址,按照这个地址去获得这个对象
  • 复制变量的不同
    • 基本数据类型复制后是完全独立的
    • 应用数据类型复制后只是多了一个指针,仍然指向一个地址
  • 参数传递不同
    • 基本数据类型只是传了值,新参数和原数据互不影响
    • 应用数据类型传递的是指针,新参数和原数据相互影响

声明变量

当您声明新变量时,可以使用关键词 “new” 来声明其类型:

var carname = new String();
var x = new Number();
var y = new Boolean();
var cars = new Array();
var person = new Object();

字符串可以是对象

通常, JavaScript 字符串是原始值,可以使用字符创建: var firstName = "John"
但我们也可以使用 new 关键字将字符串定义为一个对象: var firstName = new String("John")

var x = "John";              // x是一个字符串
var y = new String("John");  // y是一个对象
typeof x // 返回 String
typeof y // 返回 Object

注释:

  • 不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用
  • 原始值字符串虽然没有属性和方法 但是可以调用JavaScript的属性和方法,因为JavaScript会在调用时把原始值当做对象

向未声明的 JavaScript 变量分配值

如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。
这条语句carname="name"将声明 window 的一个属性 carname。
非严格模式下,给未声明变量赋值创建的全局变量,是全局对象的可配置属性,
给未声明变量赋值创建的全局变量可以删除。

var var1 = 1; // 不可配置全局属性 
var2 = 2; // 没有使用 var 声明,可配置全局属性 

运算符

字符串和数字运算结果是字符串 即 '5'+ 5 ='55'

!==

类型和值至少有一个不一样

??空值合并运算符

a??b
如果a不是null或者undefined,则结果为a
如果a是null或者undefined,则结果为b
通常用于提供默认值,例如(user ?? "匿名"
或者用于选出第一个非null/undefined的值,firstName ?? lastName ?? nickName ?? "匿名"

与||的区别

??返回第一个非null和undefined的值
||返回第一个真值,无法区分false,0,“”和null、undefined

基本循环方式

JavaScript 支持不同类型的循环:

  • for - 循环代码块一定的次数
  • for in - 循环遍历对象的属性
  • while - 当指定的条件为 true 时循环指定的代码块
  • do/while - 同样当指定的条件为 true 时循环指定的代码块

for in

<script>
function myFunction(){
	var x;
	var txt="";
	var person={fname:"Bill",lname:"Gates",age:56}; 
	for (x in person){
		txt=txt + person[x];
	}
	document.getElementById("demo").innerHTML=txt;//BillGates56
}
</script>

break 带标签引用

不带标签只可以用在循环或者swtich
带标签可以跳出任何代码块(前提是break在当前代码块内)
但是 continue 不管带不带都不可以

cars=["BMW","Volvo","Saab","Ford"]; 
list: {
  document.write(cars[0] + "<br>"); 
  document.write(cars[1] + "<br>"); 
  document.write(cars[2] + "<br>"); 
  break list; 
  document.write(cars[3] + "<br>"); 
  document.write(cars[4] + "<br>"); 
  document.write(cars[5] + "<br>"); 
}
/*
BMW
Volvo
Saab
*/

switch

case的值可以是表达式或值,可以是’a’、6、true 等任意数据类型的值,也可以是表达式

case 'error':
case age >= 18 && age <= 65:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值