Javascript访问属性值
- 使用 小圆点(.) 来访问
- 使用中括号操作符([]),如果你想访问的属性的名称有一个空格,这时你只能使用中括号操作符([])
这是一个使用中括号操作符([])读取对象属性的例子:
var myObj = {
"Space Name": "Kirk",
"More Space": "Spock"
};
myObj["Space Name"]; // Kirk
myObj['More Space']; // Spock
有时检查一个对象属性是否存在是非常有用的,我们可以用.hasOwnProperty(propname)方法来检查对象是否有该属性。如果有返回true,反之返回 false。
var myObj = {
top: "hat",
bottom: "pants"
};
myObj.hasOwnProperty("top"); // true
myObj.hasOwnProperty("middle"); // false
JavaScript Object Notation
简称 JSON,它使用JavaScript对象的格式来存储数据。JSON是灵活的,因为它允许 数据结构 是 字符串,数字,布尔值,字符串,和 对象 的任意组合。
这里是一个JSON对象数组的示例:
var ourMusic = [
{
"artist": "Daft Punk",
"title": "Homework",
"release_year": 1997,
"formats": [
"CD",
"Cassette",
"LP" ],
"gold": true
}
];
这是一个对象数组,并且对象有各种关于专辑的 详细信息。它也有一个嵌套的 formats 的数组。附加专辑记录可以被添加到数组的最上层。
提示
数组中有多个 JSON 对象的时候,对象与对象之间要用逗号隔开。
Math
- Math.random() 生成[0,1)之间的随机数,绝不会生成1;
- Math.floor() 向下取整
- 生成[0,9]之间的整数可以使用
Math.floor(10*Math.random() )
生成的[min ,max]之间的整数可以使用。
Math.floor(Math.random() * (max - min + 1)) + min
Regular expressions
正则表达式被用来根据某种匹配模式来寻找strings中的某些单词。
举例:如果我们想要找到字符串The dog chased the cat中单词 the,我们可以使用下面的正则表达式: /the/gi
我们可以把这个正则表达式分成几段:
-
/是这个正则表达式的头部
-
the 是我们想要匹配的模式
-
/ 是这个正则表达式的尾部
-
g 代表着 global(全局),意味着返回所有的匹配而不仅仅是第一个。
-
i 代表着忽略大小写,意思是当我们寻找匹配的字符串的时候忽略掉字母的大小写。
特殊选择器中的一种就是数字选择器\d,意思是被用来获取一个字符串的数字。在选择器后面添加一个加号标记(+),例如:/\d+/g,它允许这个正则表达式匹配一个或更多数字。
// 初始化变量
var testString = "There are 3 cats but 4 dogs.";
var expression = /\d+/g;
// 用 digitCount 存储 testString 中匹配到 expression 的次数
var digitCount = testString.match(expression).length;
我们也可以使用正则表达式选择器\s 来选择一个字符串中的空白。
空白字符有 " " (空格符)、\r (回车符)、\n (换行符)、\t (制表符) 和 \f (换页符)。空白正则表达式类似于:/\s+/g
\S 匹配任何非空白字符,类似于:/\S/g,注意没有加号+
可以使用构造函数来创建对象。
构造函数 通常使用大写字母开头,以便把自己和其他普通函数区别开。
下面便是一个 构造函数 了:
var Car = function() {
this.wheels = 4;
this.engines = 1;
this.seats = 1;
};
this 的属性值为公有属性,要想创建私有属性或私有方法,使用我们熟悉的 var 关键字去创建变量,来替代我们使用 this 创建 属性:
var Car = function() {
// this is a private variable
var speed = 10;
// these are public methods
this.accelerate = function(change) {
speed += change;
};
this.decelerate = function() {
speed -= 5;
};
this.getSpeed = function() {
return speed;
};
};
map方法会迭代数组中的每一个元素,并根据回调函数来处理每一个元素,最后返回一个新数组。注意,这个方法不会改变原始数组。
var oldArray = [1,2,3,4,5];
var timesFour = oldArray.map(function(val){
return val * 4;
});
reduce方法 用来迭代一个数组,并且把它累积到一个值中。
使用 reduce 方法时,你要传入一个回调函数,这个回调函数的参数是一个 累加器 (比如例子中的 previousVal) 和当前值 (currentVal)。
reduce 方法有一个可选的第二参数,它可以被用来设置累加器的初始值。如果没有在这定义初始值,那么初始值将变成数组中的第一项,而 currentVal 将从数组的第二项开始。
下面的例子使用了 reduce 来让数组中的所有值相减:
var array= [1,2,3,4,5,6,7,8,9,10];
var singleVal = array.reduce(function(previousVal, currentVal) {
return previousVal - currentVal;
}, 0);
filter 方法用来迭代一个数组,并且按给出的条件过滤出符合的元素。
filter 方法传入一个回调函数,这个回调函数会携带一个参数,参数为当前迭代的项(我们叫它 val )。
回调函数返回 true 的项会保留在数组中,返回 false 的项会被过滤出数组。
下面的代码示例展示了使用 filter 来移除数组中值等于5的项:
注意: 我们忽略了第二参数和第三参数,因为例子中我们只需要第一参数就够了。
array = array.filter(function(val) {
return val !== 5;
});
sort 方法,你可以很容易的按字母顺序或数字顺序对数组中的元素进行排序。与我们之前用的数组方法仅仅返回一个新数组不同, sort 方法将改变原数组,返回被排序后的数组。
sort 可以把比较函数作为参数传入。注:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
传参原理:当a,b两个数进行比较时,如果回调函数返回的是true,则要交换;
试想一下:当5与3进行比较时,按下面的返回true,则要交换,即升序排序;
array.sort(function(a, b) {
return a-b;
});
同理,以下则为降序排列;
array.sort(function(a, b) {
return b-a;
});
reverse 方法用来翻转数组。
var myArray = [1, 2, 3];
myArray.reverse();
concat 方法可以用来把两个数组的内容合并到一个数组中。
concat 方法的参数应该是一个数组。参数中的数组会拼接在原数组的后面,并作为一个新数组返回。
下面是一个拼接数组的例子,用concat 把 otherArray 拼接在 oldArray 的后面:
newArray = oldArray.concat(otherArray);
split 方法按指定分隔符将字符串分割为数组。
你要给 split 方法传递一个参数,这个参数将会作为一个分隔符。
下面的例子展示了 split 方法的使用,按照 s 字母进行分割:
var array = string.split('s');
join 方法来把数组转换成字符串,里面的每一个元素可以用你指定的连接符来连接起来,这个连接符就是你要传入的参数。
下面展示了使用 join 来将数组中的每一项放入字符串,并用 and 进行连接:
var veggies = ["Celery", "Radish", "Carrot", "Potato"];
var salad = veggies.join(" and ");
console.log(salad); // "Celery and Radish and Carrot and Potato"
网友评论