JavaScript基础

49 阅读4分钟

JavaScript组成

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

特性

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

变量数据类型

基本数据类型(7种)

  • 字符串(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>

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

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

声明变量类型

当您声明新变量时,可以使用关键词 "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: