Javascript
轻量级,解释型或即时编译型的编程语言
基本知识
简介
基本语法
字面量和变量
1 | var str = "hello"; |
- str是变量, “hello” 是字面量
标识符
变量名, 函数名, 属性名都属于标识符
- 可以含有字母, 数字, _, $
- 不能以数字开头
- 不能是ES中的关键字 (var)
- 采用驼峰命名法– 首字母小写每个单词开头字母大写, 其余小写
- 底层保存标识符是才用Unicode
数据类型
- String
- Number
- Boolean
- Undefined
- Null
- Object
String
其中String Number Boolean Null Undefined属于基本数据类型
Object属于引用数据类型
1 | var str = "hello"; |
转义字符 \
Number
所有数值都是Number类型
包括整数和浮点数
可以使用typeof检查数据类型
1 | console.log(typeof a); |
Number.MAX_VALUE 表示数字最大值
超出最大值 用Infinity表示
如果对string进行运算 返回NaN— not a number
如果用JS进行小数附点运算, 可能不精准
1 | var c = 0.1 + 0.2; |
所以不要使用JS做精确运算
Boolean
true false
Null
null表示空对象
1 | var a = null; |
null 值返回 typeof —–Object对象
类型强制转换
将其他类型转String
方法1:
调用toString()方法
1 | var a = 123; |
null 和 undefined 不可以使用toString()
方法2:
用String()函数
1 | var a = 123; |
null 和 underfined 可以使用String()函数
其他类型转Number
使用Number()函数
1 | var a = "123"; |
不是数字或者含非数字返回NaN
boolean转数字
- true –> 1
- false –> 0
null –> 0
undefined –> NaN
使用parseInt(), parseFloat() …
1 | var a = "123px"; |
返回123
可以解析到有效整数, 读到第一个非数字就不读了
其他进制的数字
0x表示十六进制
1 | var a = 0xff; |
0开头表示8进制
1 | var a = 070; |
0b开头表示二进制, 但不是所有浏览器都支持
1 | var a = 0b10; |
parseInt()的时候, 有些浏览器解析070数字的时候会当成8进制, 有的当十进制
可以使用第二个参数指定进制
1 | parseInt(a,10); |
转换boolean
调用Boolean()函数
数字, 除了0和null, 其余都是true
字符串, 除了空串, 都是true
null和undefined都是false
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
以上还有很多基础内容跳过了
对象
- 内建对象
- ES标准中定义的对象
- 比如 Math String Number Boolean Function Object….
- 宿主对象
- 运行环境提供的对象, 主要指浏览器提供的对象
- BOM DOM
- 自建对象
- 由开发人员创建的对象
创建对象
使用new 调用的事构造函数 constructor
1 | var obj = new Object(); |
向obj中添加属性
1 | obj.name = " a name"; |
如果读取没有的属性, 不会报错, 返回undefined
删除对象的属性
1 | delete obj.name; |
属性名不强制遵守标识符规范
特殊属性名需要需要使用 []
1 | obj["string"] = 111; |
使用情景
1 | obj["123"] = 789; |
属性值可以是任意数据类型
所以也可以嵌套对象
in 运算符
可以检查对象中是否有某个属性
1 | console.log("test" in obj); |
引用数据类型
1 | var obj = new Object(); |
结果是obj和obj2都变了
JS中的变量都是保存到栈内存中的
基本数据类型的值直接在栈内存中存储
引用数据类型(对象) 是在堆内存中的, 每次创建都会在堆中开辟一个新空间, 栈内存中保存的是地址(对象的引用)
1 | obj==obj2 //false |
对象一样, 但是地址不一样
指定属性创建对象
1 | var obj = { |
属性名和属性值是一组组键值对
函数
1 | var func = new Function(); |
typeof 检查函数对象, 返回function
构造函数
将要封装的代码以字符串的形式传递给构造函数
1 | //constructor |
函数声明
语法:
function 函数名([形参1, 形参2, 形参3]){
语句…
}
1 | function func(){ |
匿名函数
1 | //函数赋值给一个变量 |
实参
1 | function sum(a,b){ |
调用函数时解析器不会检查实参类型;
1 | sum(123,"abc") |
若如果实参数量少于形参数量, 则没有对应实参的形参是undefined
返回值
1 | function isOu(num){ |
实参
对象作为实参
1 | function sayHello(o){ |
将函数作为实参
1 | function fun(a){ |
1 | a = fun3(); |
立即执行函数
1 | //后面加(), 定义完直接被调用 |
对象方法
1 | var obj = { |
取出对象中的属性
枚举
1 | for(var n in obj){ |
作用域
全局作用域
直接编写在