> 简单基本语法
JavaScript本身对嵌套的层级没有限制,但是过多的嵌套无疑会大大增加看懂代码的难度。遇到这种情况,需要把部分代码抽出来,作为函数来调用,这样可以减少代码的复杂度。
>简单数据类型
1.number 不同于java 不去分整形和浮点型 全用number来表示
2 布尔类型 true false
简单运算符:%(取余) &&(与) ||(或) !(非) ?:(三目运算符)
isNaN(number) 用于判断是否为number类型
3null和undefined
null表示一个“空”的值,它和0以及空字符串’‘不同,0是一个数值,’'表示长度为0的字 符串,而null表示“空”。
JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义
> 数组
1.创建数组
var arr=new Array[1,2,3,4];
var arr=[“yellow”,“blue”,“hello”];
2.js中的对象
JavaScript的对象是一组由键-值组成的无序集合
每一个健值对都是对象的一个属性
var body={
name:"tangjiangxi“,
age:22,
huavegirlfriend:"no",
love:["baseketball","swim","run"]
}
> 变量
申明变量是用var 属性
var tang=100;
var arr=new Array[];
注意 在申明变量的时候,var只能用一次。
于此同时,如果一个变量没有用var申明的话,改变良会自动的被申请为全局变量
> 操作字符串
var s = 'Hello, world!';
s.length; // 13
可以操作字符串:
要获取字符串某个指定位置的字符,使用类似Array的下标操作,索引号从0开始
var s = 'Hello, world!';
s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined
需要特别注意的是,支付串是不可变的,所以对器索引对应的值赋值是没有意义的,他的字符串是不会发生改变的。
对待字符串常用的方法toUpperCase() 把小写全部转换为大写
toLowerCase()把大写全部转换为小写。indexof(num) 会检索出num的位置。
substring 可以拿到索引的位置。
var s = 'Hello';
s.toUpperCase(); // 返回'HELLO'
var s = 'Hello';
var lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower
lower; // 'hello'
var s = 'hello, world';
s.indexOf('world'); // 返回7
s.indexOf('World'); // 没有找到指定的子串,返回-1
var s = 'hello, world'
s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
s.substring(7); // 从索引7开始到结束,返回'world'
> 简单数组操作
slice()就是对应的substring()操作能够获取索引对应的部分元素。
push和pop push()最后面添加元素 pop()后面删除元素
unshift和shift 这是在数组前面的操作。shift 前面添加 unshift后面删除
reverse()把数组中的元素倒转
concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array
join(num)是一个把数组中的元素用num连接起来,并且返回的是一个字符串
> 对象
js中的对象用来描述现实中的某个对象,对象是拥有的一些属性的 , 这些属性室友健值对组成的。
var xiaoming{
name:'xiaomi',
age:20,
love,baseketaball
}
js中规定,访问不存在的属性不报错,而是返回undefined
如果我们要检测xiaoming是否拥有某一属性,可以用in操作符:
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false
因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:
> 条件判断
JavaScript使用if () { … } else { … }来进行条件判断。
else中的else如果只有一条语句,可以省略{} 如果有多条,就会,除了第一条之后的是不受条件语句控制的,所以说这里在没必要的情况下,最好把{}加上。
> 循环语句
for in
var arr=["tangjiangxi","nihao","hello"];
for(var ar in arr ){
console.log(ar);
}
要过滤掉对象继承的属性,用hasOwnProperty()来实现:
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key); // 'name', 'age', 'city'
}
}
> 函数
1.作用域
如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用。换句话说,不同函数内部的同名变量互相独立,互不影响:
2.由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:
'use strict';
function foo() {
var x = 1;
function bar() {
var y = x + 1; // bar可以访问foo的变量x!
}
var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!
}
JavaScript的函数在查找变量时从自身函数定义开始,从“内”向“外”查找。如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。
function foo() {
var x = 1;
function bar() {
var x = 'A';
console.log('x in bar() = ' + x); // 'A'
}
console.log('x in foo() = ' + x); // 1
bar();
}
foo();
全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。
减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中。例如:
// 唯一的全局变量MYAPP:
var MYAPP = {};
// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
// 其他函数:
MYAPP.foo = function () {
return 'foo';
};
为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:
'use strict';
function foo() {
var sum = 0;
for (let i=0; i<100; i++) {
sum += i;
}
// SyntaxError:
i += 1;
}
解构赋值
利用解构赋值,可以同时对多个变量进行赋值。
var [x, y, z] = ['hello', 'JavaScript', 'ES6'];
如果需要从一个对象中取出若干属性,也可以使用解构赋值,便于快速获取对象的指定属性:
'use strict';
var person = {
name: '小明',
age: 20,
gender: 'male',
passport: 'G-12345678',
school: 'No.4 middle school'
};
var {name, age, passport} = person;
> 简单高阶函数
map /reduce
由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:
'use strict';
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var results = arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
console.log(results);