对象就是一组数据,形容同一个概念的不同属性
1. JSON对象:
1) 定义:
- 形容数据的一种格局,将若干个属性或办法整顿成一个对象。能够不便的示意简单对象。
2) 语法:
- 花括号
- 键名要有双引号(字面量形式示意对象,键名不须要引号)
- 字符串值要有引号
- 键值之间是冒号 key:value
- 键值对之间是逗号,最初一个键值对前面不要加逗号
var cat= { "name":"猫咪", "age":3, "hobby":"fish", "action":function(){ console.log('喵~'); } }
3) 如何调用JSON里的属性
// 1.打点 属性必须不带引号//console.log(cat.'name');// Uncaught SyntaxError: Unexpected stringconsole.log(cat.age);//3console.log(cat.hobby);//fish
// 2.下标法 属性必须带引号// console.log(cat[name]);//undefined// console.log(cat[age]);//age is not definedconsole.log(cat['hobby']);//fish
4) for in 的利用
for(var index in cat){ //for...in中不能通过点形式获取JSON对象属性 // console.log(cat.index);//undefined //能够通过下标法获取 console.log(cat[index]);}
5) this
var huatengMa = { 'name': '马化腾', 'age': 50, 'fun':function(user){ //JSON对象的花括号中的函数,如果应用其余的函数或属性的话,须要加前缀this console.log(this.name + '来' + user + '抽奖'); } } huatengMa.fun('小米');
2. 严格模式
- "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
- "use strict" 的目标是指定代码在严格条件下执行。
- 严格模式下你不能应用未声明的变量。
- 浏览器反对: IE10+ firefox4+Safari5.1+ Chrome
一般模式:
<script type="text/javascript"> a =123; console.log(a);//123</script>
严格模式:
<script type="text/javascript"> 'use strict'; a =123; console.log(a);//a is not defined</script>
3. ES5新增的数组的办法
(1) indexOf
- 在数组中查找一个数所在的地位。
- 返回值:返回查找元素的下标,找不到返回-1
利用: 数组的去重
// 数组去重var a = [5,7,7,3,8,7,8];var b = [];for(var i=0; i<a.length; i++){ if(b.indexOf(a[i])==-1){ b.push(a[i]); }}console.log(b);//5, 7, 3, 8
(2) 回调函数
- 被当做另一个函数的参数的函数
如下示例: 假如f2是第三方提供的函数,是非开源的,所以用户无奈批改函数体内的代码。然而需要是:f2调用f1。所以把f1当作参数传给第三方,第三方函数会主动在函数体内正当的地位调用传进去的回调函数。
<script type="text/javascript"> var f1 = function(){ console.log('f1'); } //假如f2是第三方提供的函数,用户是无奈关上函数体外部去批改代码的 function f2(f){// 实参f1==形参f => f1() == f() } f2(f1);</script>
回调函数的应用:
forEach 没返回值,间接扭转原数组
- 对数组的每个元素做某个解决(函数的形式),没有返回值,间接扭转以后数组。
- 留神:foEach()函数的参数是个回调函数,forEach对应的回调函数有三个参数(数组元素内容,【元素索引】,【数组自身】)
回调函数: 回调函数的参数,也是固定好的
var arr=[6,9,1];function add(item, index, arr){ arr[index]*=10;}arr.forEach(add);console.log(arr);//60, 90, 10
map 有返回值, 通过return返回一个数组
- 把原始数组的每个元素进行某种解决后,返回(映射)一个新的数组。回调函数参数是数组元素自身。
- 留神:map()对应的回调函数有三个参数(数组元素内容,元素索引,数组自身)
map() 办法返回一个新数组,数组中的元素为原始数组元素调用函数解决后的值。
有没有return,都会有返回值。
var arr=[7,4,5];function add(item, index, arr){ arr[index] += 10; return 2;}var arr1 = arr.map(add);console.log(arr1);//70, 40, 50
问题:forEach与map有什么区别?
答:在于返回值的不同。forEach无返回值; map返回一个新的数组
filter 每个元素在遍历的时候依据条件,抉择是否return;返回一个新数组
- 依据条件过滤数组的元素,filter的回调函数须要返回的是boolean类型的值。
- 留神: filter()对应的回调函数有三个参数(数组元素内容,元素索引,数组自身)
- filter() 不会扭转原始数组。将满足条件的元素从新生成一个新的数组,新数组中的元素是通过查看指定数组中符合条件的所有元素。
var arr=[7,4,6,9];function myFilter(item, index, arr){ // 返回奇数 if(item%2){ return item; }}var arr1 = arr.filter(myFilter);console.log(arr1);//7, 9
reduce 累加每个元素的值
- 如果未写return, 依然会有返回值(undefined)
function add(total, item, index, arr){ //total 的初始值为0 total = total +item; return total; } console.log(arr.reduce(add));
4. 字符串的定义和创立
(1)根本类型
var str = 'hello';console.log(str, typeof str);//hello string
(2)援用类型
var str1 = new String('world');console.log(str1);//{world}console.log(typeof str1);//Object
5. ASCII码表
是一个规范,把每个字符与一个0-255的数字对应起来,这样就能够把字符变为数字,而后变为二进制码了。
13--->回车
32--->space
48--->字符0
65--->A
97--->a
- charAt(下标):返回下标所对应的字母
- charCodeAt(下标):返回下标所对应的字母的ASCII码
var str='120ashioA'console.log(str.charAt(1));//2 下标所对应的字母 等价于str[1]console.log(str.charCodeAt(3));//97 下标所对应的字母的ASCII码
6. 字符串常见API和属性
- length:示意字符串的长度;
- String.fromCharCode(97); //a 将编码转换成字符
- indexOf("abc") 查找字符串第一次呈现的地位
- lastIndexOf("abc") 查找字符串最初一次呈现的地位。如果没找到则返回-1。
- replace(src,dest) : 返回被dest替换src的字符串。
截取字符串
slice
- slice(start,end) 提取字符串的某个局部,并以新的字符串返回被提取的局部。
- 两个参数示意截取的开始下标和完结下标
- 左闭右开
substring
- substring(start,end) 提取字符串中介于两个指定下标之间的字符,并以新的字符串返回被提取的局部。
- 两个参数示意截取的开始下标和完结下标
- 左闭右开
- 区别: slice参数反对正数(从后往前算,正数的时候左开右闭),substring不反对正数。
split 字符串宰割:字符串变数组
- split(宰割符号) :依据分隔符、拆分成数组
var str = 'hello wo shi xiao mi';var arr = str.split('o');console.log(arr);//["hell", " w", " shi xia", " mi"]
- toLowerCase()
- toUpperCase()