JavaScript 对象
1、字符串对象
创建:
s1="hello" typeof s1 结果是string
s2=new String("hello") typeof s2结果是object
s3=`asdfsa
sdfsdf` (``为ES6中多行文本的声明)方式)
常用方法:

// ES6新增的字符串替换 var name = "sun"; var age = 23; var s = `${name} is cute, age is ${age}` //必须是`符号才能替换 console.log(s); //结果是:sun is cute, age is 23
slice(start, stop)和substring(start, stop)的区别 相同点: 如果start=stop,返回空字符串 如果stop省略,则取到字符串末尾 如果某个参数超过string的长度,这个参数会被替换为string的长度 substirng()的特点: 如果 start > stop ,start和stop将被交换 如果参数是负数或者不是数字,将会被0替换 silce()的特点: 如果 start > stop 不会交换两者,得到空字符串"" stop可以为负数,"abcdefg".slice(1,-5)结果事"b" a.slice(-5,3),a.slice(-5,"asf"),a.slice(4,"asf") 以上三种得不到结果,且都不报错 强调: 使用slice和substring之前一定要慎重,一定要知道传的参数值 这两个函数都可以传字符串参数,不报错,
2、 数组对象
创建
var arrname = [];
var arrname = new Array(元素1, 元素2,....)
var arrname = new Array(n), 只有当n为数字时,表示数组的长度
var a = [1,2,3,4]; a.length //结果时4 a[6] = "abc"; console.log(a); a的值变为[1,2,3,4,undefined, undefined, "abc"] // 遍历数组的方法 //第一种 var a = [10, 20, 30, 40]; for (var i=0;i<a.length;i++) { console.log(a[i]); } // 第二种:不推荐使用 for (var index in arr) { console.log(a[index]); }
在Javascript中,可以定义d={"name": "sun", "age": 24}
只不过存的值是object对象,d内但双引号都可以
遍历for(var i in d){console.log(i)}//i是key值
常用方法:

2.1 sort 用法
// 排序 // 1. 把元素的元素都转成字符串 // 2. 按照ASCII对应数值, 从小到大 // 3. 从最高位开始,如果相同,就看第二位 var arr = ['adf', 'b', 'rg', 'a', 'aef']; arr.sort(); // 相当于arr = arr.sort() // 返回值["a", "adf", "aef", "b", "rg", empty] // 自定义可以排序数字 function intsort(a, b){ return a-b; } var arr = [1,4,7, 3,2, true]; arr.sort(intsort); // 结果是: [1, true, 2, 3, 4, 7] //如果带有字符串 var arr = [5,3,7,2,'a','vvv',9,4,7,2,8]; arr.sort(intsort); // 结果是:[2, 2, 3, 4, 5, 7, "a", "vvv", 7, 8, 9] // 从结果上可以看出:排序的方法:插入法
2.2 splice 用法
// 用法: // arr.splice(start, deletenum, value) //第一种用法: var arr = [1,2, 4, 6, 8, 3, 4, 5] ; arr.splice(2,4); // 返回值:[4, 6, 8, 3] // arr的值为[1, 2, 4, 5] // 第二种用法: var arr = [1, 2, 4, 6, 8, 3, 4, 5] ; arr.splice(2,4, "abc"); // 返回值:[4, 6, 8, 3] // arr的值为[1, 2, "abc", 4, 5] // 第三种用法:直接插入数据 var arr = [1, 2, 4, 6, 8, 3, 4, 5] ; arr.splice(2,0, [3,4,5]); // 可以插入多个数值 // 返回值:[4, 6, 8, 3] // arr的值为[1, 2, [4, 6, 8, 3], 4, 5]
2.3 push, pop, unshift, shift 用法

2.4 forEach 用法

// 示例: var arr = [111,222,333,444]; arr.forEach(function(value,index,arr){ console.log(value, index, arr) }); /*结果是打印如下内容: 111 0 [111, 222, 333, 444] 222 1 [111, 222, 333, 444] 333 2 [111, 222, 333, 444] 444 3 [111, 222, 333, 444] */
2.5 map 用法

// 示例: var arr = [111,222,333,444]; var newArr = arr.map(function(value,index,arr){ return value+1; }); // 结果: // newArr的值[112, 223, 334, 445] // arr的值不变
3、date 对象
创建时间对象
//方法1:不指定参数 var d1 = new Date(); console.log(d1.toLocaleString()); console.log(d1.toUTCString()); // 打印的结果是: // 2019/4/7 下午11:53:05 // Sun, 07 Apr 2019 15:53:18 GMT // d1的值是:Sun Apr 07 2019 23:53:18 GMT+0800 (中国标准时间) // 方法2:传输时间格式字符串 var d2 = new Date("2019/3/20 11:12"); console.log(d2.toLocaleString()); var d3 = new Date("3/20/19 11:12"); // 格式和上面的不一样 console.log(d3.toLocaleString()); // 打印的结果是: //2019/3/20 上午11:12:00 //2019/3/20 上午11:12:00 //方法3:时间戳 var d3 = new Date(0); console.log(d3.toLocaleString()); console.log(d3.toUTCString()); // 打印的结果是: // 1970/1/1 上午8:00:00 // Thu, 01 Jan 1970 00:00:00 GMT // 方法4:参数为年月日时分秒毫秒 var d4 = new Date(2019,3,25,13,14,52,100); console.log(d4.toLocaleString()); //毫秒并不直接显示 // 打印的结果是: // 2019/4/25 下午1:14:52 // 日期+1
方法

4、math 对象

5、JSON 对象
JSON对象 var obj1 = {"name": "sun", "age": 23}; // 对象转换成JSON字符串 var str = JSON.stringify(obj1); console.log(str); // 结果:"{"name":"sun","age":23}" // JSON字符串转换成对象 var newObj = JSON.parse(str);
6、RegExp 对象
// 定义正则表达式 // 当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \) var reg1 = new RegExp("^[a-zA-Z]\\w{5,9}"); var reg2 = /^[a-zA-Z]\w{5,9}$/; //测试字符串是否是自己需要 的 reg1.test("sun123123"); reg2.test("sun123123"); // 结果:true true // 正则表达式内表示范围的大括号内不能有空格,如下: var reg = /^[a-zA-Z]\w{5, 9}$/; reg.test("sun123123"); // 结果是:false
修饰符

// 示例 // 定义全局匹配 var reg1 = new RegExp("is","g"); var reg2 = /is/g var s1 = "Is this all there is?" var res1 = s1.match(reg1); var res2 = s1.match(reg2); // 结果是: // ['is', 'is'] // ['is', 'is'] // 全局且大小写不敏感 var res3 = s1.match(/is/gi); // 结果是:['Is', 'is', 'is'] // 全局匹配是有一个lastIndex属性 var reg1 = new RegExp("\\w{3}","g"); reg1.test("sun"); // 结果是:true reg1.lastIndex; // 结果是:3 reg1.test("sun"); // 结果是:false reg1.lastIndex; // 结果是:3
// 检验是不传参数,默认是字符串"undefined" var reg2 = var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/ reg2.test(); reg2.test(undefined); var reg3 = /undefined/; reg3.test(); var reg4 = new RegExp("undefined"); reg4.test(); // 以上结果全都是:true
// 正则一些使用: /^\d+$/ //非负整数(正整数 + 0) /^[0-9]*[1-9][0-9]*$/ //正整数 /^((-\d+)|(0+))$/ //非正整数(负整数 + 0) /^-[0-9]*[1-9][0-9]*$/ //负整数 /^-?\d+$/ //整数 /^\d+(\.\d+)?$/ //非负浮点数(正浮点数 + 0) /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/ //正浮点数 /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/ //非正浮点数(负浮点数 + 0) /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/ //负浮点数 /^(-?\d+)(\.\d+)?$/ //浮点数 // 去空格 去除字符串内所有的空格:str = str.replace(/\s*/g,""); 去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,""); 去除字符串内左侧的空格:str = str.replace(/^\s*/,""); 去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");
7、 函数对象
定义方式
// 无参普通函数定义 function f1() { console.log("Hello world!"); } // 带参数的函数 function f2(a, b) { console.log(arguments); // 内置的arguments数组对象,把传入的所有参数都包含进去 console.log(arguments.length); console.log(a, b); } f2(1,2,4,6,2); // 结果 // [1, 2, 4, 6, 2] // 5 // 1 2 // 带返回值的函数 // return只能返回一个值,如果想返回多个值需要把它们放到一个数组或对象中 function sum(a, b){ return a + b; } sum(1, 2); // 调用函数 // 匿名函数方式 var sum = function(a, b){ return a + b; } sum(1, 2); // 匿名函数的正确使用方式 (function(a, b){ return a + b; })(1, 2);
ES6新增定义方式 var f = v => v; // 等同于 var f = function(v){ return v; } var f = () => 5; // 等同于 var f = function(){return 5}; var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2){ return num1 + num2; }
局部变量
在JavaScript函数内部声明的变量(使用 var)是局部变量,只能在函数内部访问它,
该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
全局变量
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
作用域:
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。
变量的值在定义阶段是就已经确定了,找作用域时一定要回到变量定义的地方
函数调用时发生了什么: 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面: 1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。 2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。 3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。 函数内部无论是使用参数还是使用局部变量都到AO上找。


浙公网安备 33010602011771号