字符串

模板字符串

需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:

  1. var s = 'Test';
  2. s[0] = 'X';
  3. alert(s); // s仍然为'Test'

数组

pop()则把Array最后一个元素删除掉:

shift()方法则把Array第一个元素删掉:

push()Array的末尾添加若干元素

unshift()往Array的头部添加若干元素

js中那些方法不改变原来的数组对象

js数组方法 改变原数组和不改变原数组的方法整理

js二维数组

对象

访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用''括起来:

  1. var xiaohong = {
  2. name: '小红',
  3. 'middle-school': 'No.1 Middle School'
  4. };
  1. xiaohong['middle-school']; // 'No.1 Middle School'
  2. xiaohong['name']; // '小红'
  3. xiaohong.name; // '小红'

实际上JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。

  1. delete xiaoming.age; // 删除age属性
  2. delete xiaoming['name']; // 删除name属性

要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

  1. var xiaoming = {
  2. name: '小明'
  3. };
  4. 'name' in xiaoming; // true
  5. 'grade' in xiaoming; // false
  6. xiaoming.hasOwnProperty('name'); // true
  7. xiaoming.hasOwnProperty('toString'); // false

条件判断

JavaScript把nullundefined0NaN和 '' 视为false,其他值一概视为true

循环

for循环的一个变体是for ... in循环,它可以把一个对象的所有属性依次循环出来:

要过滤掉对象继承的属性,用hasOwnProperty()来实现:

  1. var o = {
  2. name: 'Jack',
  3. age: 20,
  4. city: 'Beijing'
  5. };
  6. for (var key in o) {
  7. if (o.hasOwnProperty(key)) {
  8. console.log(key); // 'name', 'age', 'city'
  9. }
  10. }

do { ... } while()循环要小心,循环体会至少执行1次,而forwhile循环则可能一次都不执行。

Map和Set

JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型Map

  • Map

增删改查:set / delete / set / has

  1. var m = new Map(); // 空Map
  2. m.set('Adam', 67); // 添加新的key-value
  3. m.set(123, 59);
  4. m.has('Adam'); // 是否存在key 'Adam': true
  5. m.get('Adam'); //
  6. m.delete('Adam'); // 删除key 'Adam'
  7. m.get('Adam'); // undefined
  • Set

增删改查:add / delete / forEach / has

Set是一组不重复key的集合,不存储value。

通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果:

  1. s.add(4);
  2. s; // Set {1, 2, 3, 4}
  3. s.add(4);
  4. s; // 仍然是 Set {1, 2, 3, 4}

通过delete(key)方法可以删除元素:

  1. var s = new Set([1, 2, 3]);
  2. s; // Set {1, 2, 3}
  3. s.delete(3);
  4. s; // Set {1, 2}
  • Array

增删改查:push / splice / forEach / find

  • Object

增删改查:obj['t']=1 / delete obj['t'] / obj['t']=2 / 't' in obj

iterable

遍历Array可以采用下标循环,遍历MapSet就无法使用下标。

为了统一集合类型,ES6标准引入了新的iterable类型,ArrayMapSet都属于iterable类型。

for ... of循环和for ... in循环有何区别?

for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。

当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:

for ... in循环将把name包括在内,但Arraylength属性却不包括在内。

  1. var a = ['A', 'B', 'C'];
  2. a.name = 'Hello';
  3. for (var x in a) {
  4. console.log(x); // '0', '1', '2', 'name'
  5. }

for ... of循环则完全修复了这些问题,这就是为什么要引入新的for ... of循环。它只循环集合本身的元素:

  1. var a = ['A', 'B', 'C'];
  2. a.name = 'Hello';
  3. for (var x of a) {
  4. console.log(x); // 'A', 'B', 'C'
  5. }

更好的方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数

  1. 数组:
  2. var a = ['A', 'B', 'C'];
  3. a.forEach(function (element, index, array) {
  4. // element: 指向当前元素的值
  5. // index: 指向当前索引
  6. // array: 指向Array对象本身
  7. console.log(element + ', index = ' + index);
  8. });
  9. 输出:
  10. A, index = 0
  11. B, index = 1
  12. C, index = 2
  13.  
  14. 如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们,例如
  15. var a = ['A', 'B', 'C'];
  16. a.forEach(function (element) {
  17. console.log(element);
  18. });
  1. Set
  2. var s = new Set(['A', 'B', 'C']);
  3. s.forEach(function (element) {
  4. console.log(element);
  5. });
  1. Map
  2. var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
  3. m.forEach(function (value, key, map) {
  4. console.log(value);
  5. });
  6. 输出:
  7. 1x
  8. 2y
  9. 3z

JS快速入门的更多相关文章

  1. Node.js快速入门

    Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...

  2. Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js快速入门(二)

    Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js快速入门(二) 前言 上篇文章对Vue.js有了初步理解,接下来我们把Vue.js基础语法快速的过一遍,先混个脸熟留个印象就 ...

  3. JS快速入门(二)

    目录 JS快速入门(二) 结构图 BOM window对象 open() window子对象 location对象 history对象(了解) navigator 对象 screen对象 BOM 定时 ...

  4. Vue.js 快速入门

    什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...

  5. JS快速入门(一)

    目录 Javascript快速入门(一) 变量的命名规则 变量与常量 变量 常量 数据类型 数值型:Number 字符串:String 常用方法: 布尔类型:Boolean 未定义类型 :Undefi ...

  6. JavaScript学习02(js快速入门)

    快速入门 基本语法 JavaScript的语法和Java的语法类似,每个语句以;结束,语句块用{...}.但是JavaScrip并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代 ...

  7. 08Vue.js快速入门-Vue综合实战项目

    8.1. 前置知识学习 npm 学习 官方文档 推荐资料 npm入门 npm介绍 需要了解的知识点 package.json 文件相关配置选项 npm 本地安装.全局安装.本地开发安装等区别及相关命令 ...

  8. React JS快速入门教程

    翻译至官方文档<Tutorial>http://facebook.github.io/react/docs/tutorial.html 转载请注明出处:http://blog.csdn.n ...

  9. Vue.js快速入门

    Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们 ...

  10. Vue.js—快速入门

    Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...

随机推荐

  1. 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)

    第一篇 数据清洗与分析部分 第二篇 可视化部分, 第三篇 朴素贝叶斯文本分类 支持向量机分类 支持向量机 网格搜索 临近法 决策树 随机森林 bagging方法 import pandas as pd ...

  2. Linux系统中的文件权限

    r(read)         4    可读 w(write)   2     可写 x()           1     可执行 644            755 rw-r-r        ...

  3. vue 实现聊天框滚动到底

    在需要出现滚动条的 DOM上添加 v-scroll 属性: <div class="chat-box" v-scroll="{auto: true}"&g ...

  4. 第一章:初识Python

    一个Python列表 movies = ["The Holy Grail",1975,"Terry Jones&Terry Gilliam",91,[& ...

  5. 如何使用IcoMoon字体图标

    如何使用IcoMoon字体图标 一,字体图标工具: 1.登录字体图标网站:https://icomoon.io/app/#/select 2.Svg在线编辑工具:https://c.runoob.co ...

  6. MyBatis中choose when正确写法

    <choose> <when test="scoreRange!=null and scoreRange eq 1"> AND sc.score <! ...

  7. linux命令瞎记录find xargs

    1.创建多个文件 touch test{0..100}.txt 2.重定向 “>>” 追加重定向,追加内容,到文件的尾部 “>” 重定向,清除原文件里面所有内容,然后把内容追加到文件 ...

  8. ionic使用cordova插件中的Screenshot截图分享功能

    需要实现操作,考试完成后需要将成绩生成一张图片,分享出去, import { Screenshot } from '@ionic-native/screenshot'; constructor(pri ...

  9. [archlinux] 迁移T7从T460s到T470

    这已经不是第一次做OS的迁移了,T7早已经迁移过多台设备了.所以,其实只需要如下三步: 1.  rsync 我一直有全系统备份的习惯,T7一直会不定期的全系统rsync到Tstation上面去.所以我 ...

  10. [dpdk] dpdk启动几个线程

    看别人的代码搞得有点晕,突然有点不确定,再确认一次. 使用 helloworld程序测试一下. /root/dpdk-16.07/examples/helloworld 一:  只启动一个核心. [r ...