数据类型
基本类型
- string
- number
- boolean
- undefined
number类型,包含整数浮点数
NaN和自己都不相等,涉及NaN的计算结果都是NaN
isNaN()
函数用于判断一个数是不是NaN
引用类型
object类型
function类型 继承自object
object类型定义了prototype属性
可以通过它动态给对象绑定方法和属性
内置对象
String
封装了很多方法,如 split() replace(),indexof(),includes()
Array
JS中的数组,在数组中可以保持任何类型的数据,并且数组的长度会自动的增加
创建数组对象:
-
方式1:用这种方式创建数组的时候我们并没有指明数组元素的类型和数组对象的长度
var arr = new Array();
-
方式2:用这种方式创建数组的时候我们指明了数组对象的长度
var arr = new Array(5);
-
方式3:用这种方式创建数组的时候我们指明了数组对象的长度
var arr = new Array("Hello", "World", 23, 5.6);
-
方式4:
var arr = ["Hello", "World", 23, 6.3, true, false, new Date()];
Date
常用方法
> var d=new Date();
undefined
> d
2019-01-26T11:13:49.912Z
> d.getTime();
1548501229912
> d.toString();
'Sat Jan 26 2019 19:13:49 GMT+0800 (GMT+08:00)'
> d.toLocaleString();
'2019-1-26 19:13:49'
>
Math
注意:JS中的Math类和Java中的Math类类似.都是用来执行某些算术操作的
都是不能创建对象的.类似于Java中,通过类名.xxx,类名.xxx()调用属性和方法
var pai = Math.PI;
var num = Math.max(10, 30);
Regexp
正则表达式就是专门来处理String数据的.按照特定的规则,用正则元素指定一个有规则的模板
(例如邮箱的规则),然后测试某个String是否符合这个规则.(也就是测试某个String是否符合邮箱的规则)
使用方式:
创建正则对象
调用test()方法
被测试字符串满足正则规则返回true
// 测试参数string是否是有效的中文字符
// JS中字符是采用UniCode编码的,每个国家的字符都在在UniCode编码的某个范围之内
function checkChinaese(str) {
var re = "[u4e00-u9fa5]"; // 中文的编码范围
var regExp = new RegExp(re); // 创建正则表达式对象
if (regExp.test(str)) {
return true;
} else {
return false;
}
}
创建正则对象的方式:
var reg = new RegExp("^[hH]ello$");
var reg = /^[hH]ello$/
> var reg = /^[hH]ello$/
undefined
> reg.test("hello");
true
> reg.test("Hello");
true
> reg.test("Hello1");
false
> reg.test("Hffellasdfo1");
false
数据类型转换
typeof()函数检查数据的类型
js和python一样会自动将数据转换成boolean类型用于条件表达式
转换规则: 0 NaN "" undefined null ->false
底层实现是调用了Boolean()函数
const PI = 3.14;
if (PI){
console.log("PI is true");
}
非数值类型转数值类型
- 可以使用Number()函数
- 使用parseInt()函数
- 使用parseFloat()函数
常用parseInt()``parseFloat()
将string转数值
非string转string
toString()
(null和undefined不能用这个方法)- String()函数,该函数可以将任何类型数据转换为String,包括null和undefined
null,undefined,NaN的比较
-
undefined与null是相等;
-
NaN与任何值都不相等,与自己也不相等。
变量声明
var
声明变量
const
声明常量,必须赋初始值,且不能修改.
let
声明局部变量
运算符
==
JS中的== 和java中的== 相同点
- 对于基本类型来说,是比较两个基本类型的值是否相等
- 对于引用类型来说,是比较两个引用的地址是否相同
JS中的== 和java中的== 不同点
- 下面这种写法在java中是错误的.但是在JS中是可以的.在js会吧两个不同类型的变量转换成相同的类型,然后再去比较
- 转换的规则如下:当两个运算数的类型不同时:将他们转换成相同的类型,
- 1)一个数字与一个字符串,字符串转换成数字之后,进行比较。
- 2)true转换为1、false转换为0,进行比较。
===这是java没有的.具体的用法:
- 只有两个变量的类型一致的时候,才会去比较.如果两个变量的类型不一致则直接返回false
- === 既要比较变量的类型,又要比较变量的值
delete
delete运算符的使用,有三种形式
- 删除对象中的某个属性.但是不会影响其他的对象
- 删除数组中的某个元素,但是不会影响数组的长度和其他的数组元素
- 用在with语句中
void指定要计算一个表达式但是不返回值
href="javascript:void(0)"
不会重新刷新页面
函数
js没有函数重载
声明方式1
function add(x, y){
return x +y;
}
//形参 不用var/let/const 也没有类型,不用有返回值类型,只能返回1个值
声明方式2
add = function (a, b) {
return a +b;
};
流程控制
switch
swich语句的条件是任何类型的变量
var s1 = "hello";
switch(s1){
case "hello":
console.log("hello world");
break;
case "world":
console.log("world");
break;
default:
console.log("上述条件都不满足的情况");
break;
}
for
常规for循环
for (let i = 0; i < 10; i++) {
console.log("老婆,我想你");
}
for in (类似python中的for in 但是jsforin 只能取到Index)
const array = [3, 6, 8, 9, "呵呵", false]
for (let index in array) {
console.log(array[index]);
}
while/do while/if和java一样
面向对象
- 声明类
- 创建对象
- 调用对象的属性和方法
function Boy(name, age) {
this.name = name;
this.age = age;
this.sayHello = function (name) {
return "Hello " + name + " !";
}
this.toString = function () {
return "[name:" + this.name + ",age:" + this.age + "]";
}
}
let boy = new Boy("小明", 12);
console.log(boy.toString());
console.log(boy.sayHello("Jack"));
with语句,简化对象的访问,不用obj.xx.
let boy = new Boy("小明", 12);
with (boy) {
console.log(name);
sayHello("Rose");
console.log(toString());
}
JSON
eval()函数
我们把一段有效的JS代码放到了一个String中
eval()函数就可以解析并执行String中有效的js代码
> var s2 = "console.log('hello js!')";
undefined
> eval(s2);
hello js!
undefined
JSON定义语法
JavaScript对象标记,可以简化自定义对象的使用过程,定义并实例化一个js对象
JSON语法 : var 变量 = {
属性: 属性值,
属性: 属性值,
属性: 属性值 // 注意:最后一个语句后面没有,
};
属性值 可以是 任何类型,(当然也可以是数组了)
> var xx = {name:"jack",age:12}
undefined
> xx
{ name: 'jack', age: 12 }
> xx.age;
12
> xx['age']
12
属性的访问方式:
- xx.属性名
- xx["属性名"]
定义有方法的JSON对象
function sayHi(name) {
console.log("你好," + name + "!!");
}
var stu = {name: '张小三', age: 12, sayHello: sayHi}
stu.sayHello("小明");
定义复杂的JSNO对象,属性名可以用字符串,也可以不用.
var per = {
"name": "张三",
"addr": { // 地址的属性是另外一个JSON对象
"city": "北京",
"street": "大兴区",
"zipcode": "100012"
},
"aihao": ["抽烟", "喝酒", "烫头"] // 爱好属性的值是一个数组
};
使用JSON来传输数据
// 下面这个string就是从服务器端返回的json格式的string
var str = 'var user ={"name": "张三",age : 23,"address":"北京市大兴区"}';
// 使用eval函数解析并执行这个从服务器端返回的string
eval(str)
// 访问对象的属性
console.log("user.name=" + user.name + ",age=" + user.age + ",address=" + user.address);