(一)作用域
在js中只有函数可以限定变量的作用域
if(false) {
var num = 10;
}
alert(num); // undefined
(二)类型补充
1.js中数字是浮点类型,而且是不精确的类型
0.3000000004
0.399999998 -> 0.4
2.MongoDB(NoSQL)使用的是javascript shell
一个是模糊数字
一个数字表示上限
一个数字表示下限
3.字符串
var str = ‘字符串’;
在js中双引号和单引号都表示字符串:
<input type="button" onclick="alert("Hello World")"/>
<input type="button" onclick="alert('Hello World')"/>
json案例
var str = "{k1:123,k2:456}";
var str = "{k1:'张三',k2:'李四'}";
new Function("return " + str)();
数组
var arr1 = []; // 字面值,直接量
var arr2 = new Array();
(三)对象
js是面向对象的语言
js中对象是什么:就是键值对
var foo = function() {};
键值对,值可以是数字、字符串或布尔类型的数据,好比字段
值也可以是函数,好比方法,键就是变量名或函数名
对象的字面值(JSON)
var o = {}; // Object对象
var o = {
name:"小宅",
sex:"女",
age:19,
sayHello:function() {
alert("你好")
}
};
关联数组
o.name
o.sayHello()
在js中支持将对象当作数组使用
o["name"]
o["sayHello"]()
this
-> 在C#中,this表示当前对象(实例)
-> js中也是一样
(四)构造方法与对象
1.什么是构造方法
就是普通方法
调用的时候使用new就可以将其作为构造方法来使用了
js没有类,直接使用构造方法创建对象
2.实现步骤
创建一个函数
new这个函数
添加成员
在构造方法中使用this.成员进行添加
3.实例
var o1 = {};
var o2 = new Object(); // Object的构造方法
// js中所有的对象类型"来自于"object
// 判断变量是否是构造方法创建出来
boolean 变量 instanceof 构造方法
alert({} instanceof Object);
4、 js支持动态成员
-> 如果一个对象没有定义Memeber的属性,但是现在希望她有
只需要用"对象.Member=值",那么就可以给这个对象创建该成员了
(五)类型的转换与包装对象
1.基本类型的转换
number、boolean、string
①数字->字符串
-> String(数字)
-> 数字+""
-> 数字.toString()
②字符串转数字
-> 字符串-0
-> Number(字符串)
-> parseInt() parseFloat()
③转boolean
if(!!val) {
}
2.包装类型
基本类型:number、string、boolean
包装类型:Number、String、Boolean
基本类型不是对象,那么就不具备方法,只是一个简单的数据
在执行诸如"num.toString()"的时候
编译器会自动的根据num生成一个Number类型的对象,并调用toString方法
将结果返回,然后释放Number对象,等待垃圾回收
3、 常用对象
字符串
数组
时间
正则表达式
异常
(六) 正则表达式
基本元字符:
.
[]
|
()
限定元字符:
+
*
?
{n}
{n,}
{n,m}
首尾元字符
^
$
简写形式
\d \D
\w \W
\s \S
在javascript中如何创建一个正则表达式
字面值:var regex = /\d+/;
构造函数:var regex = new RegExp("\\d+");
匹配
bool Regex.IsMatch(字符串, 正则);
boolen 正则表达式对象.test(字符串);
提取
提取使用方法
像数组的对象 正则表达式对象.exec(字符串);
这个对象的[0]是匹配到的结果
这个[1]、[2]、...是各个组
在正则后面加上一个g,表示全局模式
循环提取使用的方法与刚才是一样的,不同的是需要循环调用exec方法
每次方法匹配一个,循环匹配结束后返回null,然后又从新的一轮开始
替换string <string>.replace(正则表达式或字符串, 替换为的字符串);