JavaScript的基础知识——变量、数据类型
JavaScript是什么?
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言。通俗一点:JS是前端代码中最重要的部分(行为层),常用来操作HTML页面,响应用户的操作,验证传输数据等。
声明变量
使用let
或者var
声明变量,变量可以用来存储各类数据以便后续使用。
变量命名规则
严格区分大小写;
只能包含 字母 数字 _ $,不能以数字开头;
不能使用 关键词/保留词;
除非需要,否则不要覆盖已有的API;
见名知意。
var和let的区别:
var: 页面加载时,两个过程:
1、先定义阶段
会找到当前作用域中的var定义的变量(只定义变量,不会提前赋值)
2、执行阶段
从头开始,往下执行代码
1)在if、for、while···内不看成一个作用域,在这些内定义变量等于全局变量,只在function()函数里面看成是一个作用域。
console.log(a); //undefined
if(false){
var a = 10;
}
console.log(a); //undefined
a:是全局变量
2)定义相同变量时,后者会把前者覆盖。
3)var 声明的变量会挂载在 window 对象上,而 let 和 const 声明的变量不会
let:
1)不仅仅把函数当成作用域,在if、for、···内也看成一个作用域,定义的变量不是全局变量
2)没有定义的变量不能提前使用
console.log(a);
let a = 10;
3)同一个作用域不可以let同一个变量
let a = 1;
let a = 2;
const:定义的是常量。
常量:即定义后不可修改的(不允许重新赋值)
const是用于一个或多个常量,声明时必须初始化,且初始化后值不可修改。否则会报错。
const a = 111;
console.log(a); //111
数据类型
数据类型分为:
基础数据类型:number、string、boolean、undefined、null
复杂数据类型:引用数据类型
基础数据类型
number 数字类型
数字类型包括整数,小数(浮点数)
特殊:NAN属于数字类型
let a = 10;
let b = 1.1;
string 字符串类型
字符串类型是以单引号、双引号、模板字符串括号起来的。
括号里面可以是中文、英文、数字、符号,但是定义字符串类型的单引号、双引号、模板字符串不能嵌套使用,如果一定要加,需要用转义符号。
let a = "中文";
let b = 'english';
let c = `111`;
let d = "中"国""; //这种写法错误
let f = "中\"国\""; //正确写法
boolean 布尔类型
布尔类型只有真和假:true和false;
let a = false;
let b = true;
undefined 未定义类型
未定义类型就是只声明未赋值。不指向任何东西
let a ;
let b = undefined;
null 空指针
不知道开始变量是什么样的值,但是确定的是变量被存储的是一个对象类型
let a = null;
引用数据类型
对象类型
Array 数组
数组就是一个数据,里面用来存储一组数据
let a = [];//定义
let b = [100,"数组",1,true];
//取数据,数组里面的数都有一个下标,利用下标取数据,从0开始
console.log( b[2] ); //结果是1
console.log( b.length ); //取长度,为4
//给某一项重新赋值
a[0] = 20;
Object 对象数据
对象:就是对一个事物的描述
两个属性名不能相同,相同会被覆盖;
对象里面的数据没有顺序之分。
let a = {
//(属性)键 : 值
name : "姓名",
age : 20,
height : "175cm",
};
//取值
console.log(a.name); //方法一
console.log(a["name"]); //方法二,[]里面表示一个数据,没有加“”号表示是一个变量
//修改某个属性
a.age = 22;
//删除某个属性
delete a.age;
//添加新属性
a.tel = "12345678901";
与数组的相同与不同:
同:都可以存放不同的数据;可以存放多个数据
不同:对于每个数据都有一个描述,称之为属性
嵌套取值
let a = {
//(属性)键 : 值
name : "姓名",
age : 20,
height : "175cm"
friend:{
name : "名字",
hobby : ["唱歌","画画","弹琴"]
}
};
//取数据
console.log( a.friend.hobby[2]); //弹琴
function函数
把一堆代码封装起来,使浏览一运行不会立即调用,除非调用函数才会执行
function a (){
//定义一个函数,a为函数名
}
//函数调用
a();
内置对象 节点对象
在JavaScript里已经被提前定义好的,不需要定义就可以获取的。
比如:window 、document
typeof运算符
用于检测基本数据的类型,返回的是一个字符串
console.log( typeof 10 ); //number
console.log( typeof "10" ); //string
console.log( typeof true ); //boolean
console.log( typeof undefined ); //undefined
console.log( typeof null ); //特殊:返回的是object
console.log( typeof [] ); // object
console.log( typeof {} ); //object
console.log( typeof function a(){} ); //返回function,但这个是函数,属于的是object类型
值类型和引用数据类型的区别
值类型
值类型是指原始类型的值,也叫基本类型。
数据类型:number、string、boolean、null、undefined
存储在栈中,占内存空间固定、使用后被销毁
赋值方式:1)值的拷贝,创建一个新对象
2)保存和复制是值本身
3)两份数据在内存是完全独立的
值不可变
作用域在函数作用域,在函数内部修改时生效,函数销毁时失效。
对象和对象的比较是:值的比较
类型的检测:typeof运算符
引用类型
引用值是指引用类型的值。
数据类型:object、function、array、data、regexp
存储在堆,占内存空间不稳定,使用后不一定被销毁,只有一个对象没有任何引用时,系统的垃圾回收机制才会回收销毁
赋值方式:1)引用的拷贝,创建一个新引用
2)保存与复制的是指向对象的一个指针
3)使用new()方法构造出的对象是引用类型
值可变
作用域是在函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。
对象和对象的比较是:地址的比较
类型的检测:instanceof运算符