js 基础
变量
1变量就是一个存储数据的容器
2声明变量使用var关键字
3变量的声明
js
var name = '右侧为表达式'
// var 是声明变量的关键字
// name 是变量的名字
// = 赋值运算符
// = 右侧表达式
var提升变量,至少把变量提升到作用域的最顶层,变量的赋值不会提升,依旧保留在原始位置
内存分配
内存中的栈(有序存储):存储基础数据类型的数据、字符串、数字、布尔值
内存中的堆(无序存储):存储的是复杂、引用类型数据、对象、数组
变量名规范
1 变量名不能是js的关键字或保留字
2 变量名不能数字开头
3 可以使用$、下划线、英文字母
4 遵循语义化规则,让变量有意义
5 尽量使用驼峰命名法:
大驼峰命名法:myname => MyName,单词首字母大写
小驼峰命名法:myname => myName,除了首字母其他大写
6 变量首字母应该对应数据类型
字符串:var s_name
数字:var n_count
作用域
定义:程序生效的空间
全局作用域:script(脚本)
顶级对象:window、document、
window又叫BOM
document又叫DOM
BOM包含DOM
局部作用域:function(函数)、module(es6)
顶级对象:this
内部声明的变量
声明在局部作用域中的变量不可外部使用,如果不使用关键字声明的变量。则会被提升到全局作用域
函数天生有返回值默认就是undefined
数据类型
基本数据类型(内存栈内存储)
数字
字符串
布尔值
空值 null
未定义 undefined
不是数字
引用数据类型(内存堆内存储)
数组
对象
函数
正则
基本数据类型和引用数据类型(区别)
基本数据类型在赋值时是在栈内开一个新的空间存储,多个变量使用同一个值也是对值的深拷贝,每个值都拥有独立的存储空间
引用数据类型在赋值时是在堆内开一个空间,将存储空间的标识码赋给了变量,多个变量赋值为同一个对象时,只是简单复用了标识码的引用,俗称浅拷贝
类型转换
字符串=>数组
字符串数字
所有的数据都可以相互转换
显示转换
从代码上可以直观看出在转换数据类型
使用数据的构造函数:string(),number(),array()
使用方法,比如转成字符串可以使用tostring方法
隐式转换
if表达式可以隐式转换
+任何值和字符串加,都会被转换为字符串
除了加其他减乘除都是尝试将数据转换为数字进行计算
逻辑运算符也会隐式转换数据
数据类型检测
typeof 对基本数据类型检测好用,对引用数据类型都是object
instanceof 检测一个值是不是属于一个数据原型上的,对于引用数据类型很精准
construceof 可以检测基本数据和阴影书记类型,但是检测不出空置类型,因为空置类型没有构造函数
obgect.prototype.tostring.call() 可以检测所有数据类型