1、JavaScript不区分整数和浮点数,统一用Number表示。

NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity / ; // Infinity
/ ; // NaN

注意%是求余运算

2、要特别注意相等运算符==

第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;

第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。// (推荐坚持使用===比较)

注意:

(1)NaN这个特殊的Number与所有其他值都不相等,包括它自己

NaN === NaN; // false

唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true

(2)浮点数(帶小數點的數)的相等比较

 /  === ( -  / ); // false

Math.abs( /  - ( -  / )) < 0.0000001; // true

3、null和undefined

null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。

undefined,它表示“未定义”。

4、变量

var a; // 申明了变量a,此时a的值为undefined

(1)变量名是大小写英文、数字、$_的组合,且不能用数字开头

(2)如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:i = 10; // i现在是全局变量

(3)ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。

启用strict模式的方法是在JavaScript代码的第一行写上:

'use strict';

5、字符串

(1) ' 本身也是一个字符,那就可以用""括起来;

字符串内部既包含'又包含",用转义字符\来标识:

'I\'m \"OK\"!';  //表示的字符串内容是:I'm "OK"!

(2)多行字符串

由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示:

`这是一个
多行
字符串`;

(3)模板字符串

var name = '小明';
var age = 20;
var message = '你好, ' + name + ', 你今年' + age + '岁了!';

有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量

var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;

(4)操作字符串

toUpperCase

toUpperCase()把一个字符串全部变为大写:

var s = 'Hello';
s.toUpperCase(); // 返回'HELLO'

toLowerCase

toLowerCase()把一个字符串全部变为小写:

var s = 'Hello';
s.toLowerCase(); //返回‘hello’

indexOf

indexOf()会搜索指定字符串出现的位置:

var s = 'hello, world';
s.indexOf('world'); // 返回7

substring

substring()返回指定索引区间的子串:

var s = 'hello,world'
s.substring(2,5);//从索引0开始到5(不包括5),返回‘hello’;
s.substring(7);//从索引7开始到结束,返回‘world’

6、数组

(1)请注意,直接给Arraylength赋一个新的值会导致Array大小的变化:

var arr = [1, 2, 3];
arr.length; //
arr.length = 6;
arr; // arr变为[1, 2, 3, undefined, undefined, undefined]

(2)Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array

var arr = ['A', 'B', 'C'];
arr[1] = 99;
arr; // arr现在变为['A', 99, 'C']

(3)请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:

var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']

(4)操作数组

indexOf    搜索一个指定的元素的位置

var arr = [10,20,'30'];
arr.indexOf(10)//元素10的索引为0

slice     它截取Array的部分元素,然后返回一个新的Array

var arr = ['A','B','C','D','E'];
arr.slice(0,3)//从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
arr.slice();/// ['A', 'B', 'C', 'D', 'E']

注意到slice()的起止参数包括开始索引,不包括结束索引。

如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array

push和pop   push()Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉:

var arr = [1, 2];
arr.push('A', 'B'); // 返回Array新的长度: 4 arr:[1, 2, 'A', 'B']
arr.pop(); // pop()返回'B' arr: [1, 2, 'A']
arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次 arr: []
arr.pop(); // 空数组继续pop不会报错,而是返回undefined arr: []

unshift和shift     unshift()方法往Array的头部添加若干元素,shift()方法则把Array的第一个元素删掉:

var arr = [1,2];
arr.unshift('A','B'); // arr: ['A', 'B', 1, 2]
arr.shift(); // arr: ['B', 1, 2]
arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次 arr: []
arr.shift(); // 空数组继续shift不会报错,而是返回undefined arr: []

sort   sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序

var arr = ['B', 'C', 'A'];
arr.sort(); //arr: ['A', 'B', 'C']

reverse reverse()把整个Array的元素反转

var arr = ['one','two','three'];
arr.reverse(); // ['three', 'two', 'one']

splice    splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
//从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2,3,'Google','Facebook') //arr: ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2,2) ////arr: ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2,0,'Google', 'Facebook') //arr: ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat   concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array

var arr= ['A','B','C'];
var arred = arr.concat([1,2,3])
arred; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']

arr.concat(1,2,[3,4]) // ['A', 'B', 'C', 1, 2, 3, 4]

请注意concat()方法并没有修改当前Array,而是返回了一个新的Array

实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array

join  join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

如果Array的元素不是字符串,将自动转换为字符串后再连接。

7、对象

(1)对象的定义

JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。

JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开

var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};

(2)访问属性和属性名

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

var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};

xiaohong的属性名middle-school不是一个有效的变量,就需要用''括起来。访问这个属性也无法使用.操作符,必须用['xxx']来访问:

xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小红'
xiaohong.name; // '小红'

我们在编写JavaScript代码的时候,属性名尽量使用标准的变量名,这样就可以直接通过object.prop的形式访问一个属性了。

(3)访问不存在的属性

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

JavaScript规定,访问不存在的属性不报错,而是返回undefined

var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; //
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错

(4)检测对象的属性:in操作符和hasOwnProperty()方法

如果我们要检测xiaoming是否拥有某一属性,可以用in操作符:

var xiaoming = {
name: '小明',
};
'name' in xiaoming; // true
'grade' in xiaoming; // false

不过要小心,如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:

'toString' in xiaoming; // true

因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性。

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

var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

8、条件判断

JavaScript把nullundefined0NaN和空字符串''视为false,其他值一概视为true,因此上述代码条件判断的结果是true

9、循环

(1)for循环

for循环最常用的地方是利用索引来遍历数组:

var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
console.log(x);
}

(2)for...in

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

var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
console.log(key); // 'name', 'age', 'city'
}

由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for ... in循环可以直接循环出Array的索引:

var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); // '0', '1', '2'
console.log(a[i]); // 'A', 'B', 'C'
}

请注意for ... inArray的循环得到的是String而不是Number

(3)while

while循环只有一个判断条件,条件满足,就不断循环,条件不满足时则退出循环

var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
console.log(x); //

(4)do ... while

最后一种循环是do { ... } while()循环,它和while循环的唯一区别在于,不是在每次循环开始的时候判断条件,而是在每次循环完成的时候判断条件:

var n = 0;
do {
n = n + 1;
} while (n < 100);
console.log(n); //

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

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

  1. Node.js快速入门

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

  2. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

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

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

  4. keras搭建神经网络快速入门笔记

    之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...

  5. JS快速入门(二)

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

  6. Vue.js 快速入门

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

  7. Knockout.js快速学习笔记

    原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...

  8. JS快速入门(一)

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

  9. C++ 快速入门笔记:进阶编程

    C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...

随机推荐

  1. android studio java: -source 1.6 中不支持 switch 中存在字符串 的错误

    F4打开open moudle setting 将source Compatibility 改为1.7 F4打开open moudle setting 将targetCompatibility 改为1 ...

  2. php 实现简拼

    <blockquote>model::::::::::::::::::::::::::::: function getFirstCharter($str){if(empty($str)){ ...

  3. HP Jack介绍

    转载:https://www.cnblogs.com/Peter-Chen/p/3999212.html 目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为he ...

  4. matlab将rgb图转为灰度图的原理代码

    MyYuanLaiPic = imread('e:/image/matlab/Cluo.jpg');%读取RGB格式的图像 MyFirstGrayPic = rgb2gray(MyYuanLaiPic ...

  5. java中的ElasticSearch搜索引擎介绍。

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  6. Technical poem

    Apartment Good apartment be booked the second it bring to market. low product sold to many man, and ...

  7. K8S学习笔记之k8s日志收集实战

    0x00 简介 本文主要介绍在k8s中收集应用的日志方案,应用运行中日志,一般情况下都需要收集存储到一个集中的日志管理系统中,可以方便对日志进行分析统计,监控,甚至用于机器学习,智能分析应用系统问题, ...

  8. RXD, tree and sequence IN HDU6065

    解这道题绕了好多弯路...先是把"depth of the least common ancestor"这句话忽视掉,以为是最深点与最浅点的深度差:看到某人题解(的开头)之后发现自 ...

  9. Docker Swarm 负载均衡详解 or 模式选择

    Docker Swarm 负载均衡详解 Swarm模式内置DNS组件,可以自动为集群中的每个服务分配DNS记录. Swarm manager使用内部负载均衡,根据服务的DNS名称在集群内的服务之间分发 ...

  10. oracle group by placement可能导致错误结果的bug

    Last week I’ve mentioned on Twitter that we ran into wrong result bug. We found workaround quickly b ...