Basic Javascript

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" 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...
    付林恒阅读 16,440评论 5 28
  • Comment your JavaScript Code JavaScript中的注释方式有以下两种: 使用 //...
    归云丶阅读 1,101评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,052评论 0 1
  • 1.JavaScript中的注释方式有以下两种:使用 // 来告诉JavaScript来忽略当前行的代码// Th...
    Marks阅读 8,066评论 2 5