变量的提升
只有通过var定义的变量才会出现变量提升
全局变量:自定义函数外变量和没有通过var定义的变量
局部变量:自定义函数内变量
全局作用域里无法调用局部变量
局部作用域里可以调用全局变量
b=2;
function fun() {
var i = 1
console.log(b) // 2
b = 5;
console.log(b) // 5
}
console.log(i) //i is not defined'
var c = 3
function fun1() {
var i = 1 ; //局部变量
// var c
console.log(c) // undefined
var c = 5;
console.log(c) // 5
}
fun1()
var x
console.log(x) // undefined
x = 10
console.log(x) // 10
数组
var arr = []; console.log(arr);
var arr1 = new Array(); //定义空数组 等同于 var arr = [];
console.log(arr1);
var arr2 = [1,2,3];
console.log(arr2.length);
console.log(arr2[2]);
console.log(arr2[3]); // undefined 数组声明了 但是没有给这一项赋值
var arr3 = new Array(1,2,4);
console.log(arr3);
var arr4 = new Array(4); // 数组长度是4的空数组
console.log(arr4);
arr4[0] = 123;
// new Array() 定义数组 如果传多个值 就是数组的初始化赋值 如果只传一个值的话代表定了数组的长度 但是是空数组
var arr5 = [1,2,3,4,5,6,7];
for(var i=0; i<arr5.length ;i++) {
console.log(arr5[i]);
}
var arr6 = [1,2,'3','hello', true, undefined];
console.log(arr6);
// concat 链接两个数组 返回一个新的数组
var a1 = [1,2];
var a2 = [2,34];
var a3 = a1.concat(a2);
console.log('a1:',a1);
console.log('a2:',a2);
console.log('a3:',a3);
// push 向数组的末尾添加元素 会改变原数组 返回数组的长度
var len = a1.push(3,4);
console.log(len);
console.log(a1);
// [1,2,3,4]
// pop 删除数组的最后一个元素 返回删除的元素 原数组会改变
var t = a1.pop();
console.log(t);
console.log(a1);
// [1,2,3]
// unshift 向数组的开头添加元素 返回新数组的长度 原数组会改变
var l2 = a1.unshift(11,89);
console.log(l2);
console.log(a1);
// [11,89,1,2,3]
// shift 删除数组的第一个元素 返回被删除的元素 原数组会改变
var t2 = a1.shift();
console.log(t2);
console.log(a1);
//[89,1,2,3]
// slice(start, end) 从start开始截取到end(不包含end) 返回一个新数组,原数组不变
// 如果只传一个值,就是一直截取到数组结尾
var tmp = a1.slice(1);
console.log(tmp);
console.log(a1);
var a4 = a1.slice(1,2);
console.log(a4);
// splice(index, howmany, x1,x2...)
// 数组添加或删除元素 返回新数组 原数组会改变
var b = [1,2,3,4,5,6];
var b1 = b.splice(1,3);
console.log(b); // [1,5,6]
console.log(b1); // [2,3,4]
// [1,5,6]
// splice(index,howmany,x1,x2 )
// 删除第index元素追加howmany个元素 分别是x1,x2
var b3 = [1,2,3]
var b2 = b3.splice(2,3,1,2,3);
console.log(b2);
console.log(b3);
// reverse() 数组倒序该方法会改变原来的数组,而不会创建新的数组。
var b4 = [2,1,4,5];
var b5 = b4.reverse();
console.log(b4);
console.log(b5);
// sort() 对数组排序 会改变原数组
// sort() 如果不传值 会按照字典序进行排列
function s1(a,b) {
// return a-b; //升序排列
return b-a; //降序排列
}
var b6 = [31,12,1,26,9,0, 2,37];
// var b7 = b6.sort(s1);
// console.log(b6);
// console.log(b7);
var b8 = b6.sort();
console.log(b8);
// toString 将数组转换成字符串 中间用,分割
var c1 = ['hello', 'world'];
var c2 = c1.toString();
console.log(c1);
console.log(c2);
// join 将数组转换称字符串 可以用指定字符分割
var str = c1.join(';');
console.log(str);
Date
console.log(myDate.getDate());
console.log(myDate.getDay());
console.log(myDate.getMonth()+1);
console.log(myDate.getFullYear());
console.log(myDate.getTime());
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var str = year + '年' + (month + 1) + '月' + day + '日';
console.log(str);
字符串对象
replace 字符串的替换
split 把字符串转成数组
indexOf 检索字符串中某字符首次出现的位置,如果没找没到返回-1
lastIndexOf 检索字符串中某字符最后一次出现的位置
substr(index, length) 从下标未index开始,截取length长度的字符
substring(start, stop) 截取start和stop之间的字符 不包括stop
slice(start,end) 截取start和end之间的字符 不包括end , 能使用负数
指定位置的字符 索引下标从0开始
var str1 = 'hello world';
console.log(str1.charAt(0));