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){ | 
作用域
全局作用域
- 直接编写在 
