JavaScript笔记-2(基本语法)


数据类型

1.Number

JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型

123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

2.字符串

1.字符串是以单引号'或双引号"括起来的任意文本

var aString = '原来我是字符串';
var anOtherString = "哎呦,我也是";

2.[1]如果'本身也是一个字符,那就可以用""括起来 [2]如果字符串内部既包含'又包含" ,可以用转义字符\来标识

var aString = "It's my cat";
var antherString = "\`";//[2]

3.[1]ASCII字符可以以\x##形式的十六进制表示 [2]Unicode字符可以以\u####的形式表示

var a =  "\x41"; //[1] 等同于 ‘A’
console.log(a);
var b = '\u6C6A\u6C6A';//[2] 等同于‘汪汪’
console.log(b);

4.多行字符串用\n表示 ES6标准新增了一种多行字符串的表示方法,用 ... 表示

var c = `第一行
第二行
第三行`;
console.log(c);//ES6才可以

5.模板字符串[1]要把多个字符串连接起来,可以用+号连接 [2]ES6使用${}

var cat = "cat";
var catAge = "1";
var message = "A"+ " " +cat +" "+ catAge;//[1]
console.log(message);

var cat = "cat";
var catName = "HelloKitty";
var message = `A ${cat} name is ${catName}`;//[2]注意必须使用"`"
console.log(message);

6.字符串操作

var a = "Hello! HelloKitty";
var theLength =  a.length;//字符串长度17
console.log(theLength.toString());

var aChar = a[0];//H
console.log(aChar);//H
var anOtherChar = a[40];//不在索引范围内返回undefined
console.log(anOtherChar)//undefined

var b = "canChange?";
b[0] = "";//对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果
console.log(b);//canChange?


var c = b.toUpperCase();//把一个字符串全部变为大写
console.log(c);//CANCHANGE?
var d = b.toLowerCase();//把一个字符串全部变为小写
console.log(d);//canchange?

var e = b.indexOf("a")
console.log(e);//搜索指定字符串出现的位置只会是第一个
var f = b.indexOf("d");
console.log(f);//搜索不到返回-1

var g = b.substring(1);//从索引1开始到结束
console.log(g);
var h = b.substring(1,3);//从索引1开始到3(不包括3)
console.log(h);

var i = b.substr(1,3);//从索引1开始到3(包括3)
console.log(i);

3.布尔值

一个布尔值只有true、false两种值,要么是true,要么是false

var aBoolValue = ture;

4.比较运算符

JavaScript允许对任意数据类型做比较:

 false == 0; // true
 false === 0; // false

JavaScript有两种比较运算符:
==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果
===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较
判断NaN使用函数isNaN()函数;
判断浮点数是否相等Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; //ture

null表示一个“空”的值
undefined表示值未定义

5.数组

JavaScript的数组可以包括任意数据类型

var arr = [1, 2, 3.14, 'Hello', null, true];
arr[0]; // 返回索引为0的元素,即1
arr[5]; // 返回索引为5的元素,即true
arr[6]; // 索引超出了范围,返回undefined
或
var arrAnther = new Array(1, 2, 3); // 创建了数组[1, 2, 3]

1.直接直接给Array的length赋一个新的值会导致Array大小的变化

var aArry = [1, 2, 3.14, 'Hello', null, true];
console.log(aArry);
aArry.length = 10;//指定长度比原来大,会增加至指定长度增加的位置值为undefined
console.log(aArry);//[ 1, 2, 3.14, 'Hello', null, true, , , ,  ]
console.log(aArry[8]);//undefined

aArry.length = 3;//指定长度比原来小会截取掉超过指定长度之后的元素 ,小于0会报错
console.log(aArry);

2.Array可以通过索引把对应的元素修改为新的值

var anArry = ["1","2","3"];
//anArry[-1] = 3;下标指定小于0  不知道什么奇怪的结果😂
//console.log(anArry);

anArry[1] = "第一";//直接修改值
console.log(anArry);

anArry[5] = 5;//若果超过数组长度,则Arry的大小变化
console.log(anArry);

3.数组的操作

`1. indexOf`
var arryOne = ["第一", 20, '30', 'abc'];
console.log(arryOne.indexOf(20));//元素20的索引为1
console.log(arryOne.indexOf("ab"));//找不到返回-1

`2. sliceslice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array`
console.log(arryOne.slice(0,2));//从索引0开始,到索引2结束,但不包括索引2
//console.log(arryOne.slice(3,5)); 只要第一个参数>=数组最大索引,会报错
console.log(arryOne.slice());//参数不填,直接返回复制的相同的新数组

`3. push和pop push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉`
arryOne.push("4",5);//最后一位开始添加元素
console.log(arryOne);
arryOne.pop();//没有参数,删除最后一位,空数组pop不会报错
console.log(arryOne);

`4. unshift和shift 如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉`
arryOne.unshift("我才是第一","第二");//头部添加若干元素
console.log(arryOne);

arryOne.shift();//删除第一个元素
console.log(arryOne);

`5. sort 对数组排序 会改变原数组的排序`
var arryTwo = arryOne.slice();
console.log(arryOne);
console.log(arryTwo);

`6. reverse 把整个Array 反转`
console.log(arryTwo.reverse());

`7. splice() 它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:`
var arryThree = ["one","two",3,4];
arryThree.splice(1,2,"添加1","添加2","添加3");//从索引1开始开除2个元素,并添加元素若干
console.log(arryThree);

arryThree.splice(2, 2);//只删除不添加
console.log(arryThree);

arryThree.splice(2, 0,"添加4");//只添加不删除
console.log(arryThree);

`8. concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array:`
var arryFour = [1,2,3];
var arryFive = [4,5,6];
var newArry = arryFour.concat(arryFive);
console.log(newArry);

var anOtherNewArry = newArry.concat(7,8,9,[10,11,12]);//全部拆开再拼接
console.log(anOtherNewArry);

`9. join()方法是一个非常实用的方法,它把Array的每个元素用指定的字符串连接起来,然后返回连接后的字符串`
var arrySix = ['A', 'B', 'C', 1, 2, 3];
var aString =  arrySix.join('^');
console.log(aString);

6.对象(😂。。对象)

var aDog = {
    name: '单身狗',
    age: '保密',
    tags: ['性格好', '知书达理','😂','自己脸都红了'],
    city: 'Shanghai',
    form: '江苏',
    hasCar: false,
    zipcode: null,
    'ha-ha':"^_^"
};

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

console.log(aDog.zipcode);
console.log(aDog.name);
console.log(aDog['ha_ha']);

2. 访问不存在的属性不报错,而是返回undefined

console.log(aDog.ddddd);

3. JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:

aDog.girlFriendName = "null";
console.log(aDog.girlFriendName);

delete aDog.age;//删除属性
console.log(aDog.age);//存在的属性打印为undefined

4. 如果要检测对象是否拥有某一属性,可以用in操作符或函数hasOwnProperty``

console.log('age' in aDog);//in是判断自身或继承来的父类是否有这个属性
console.log(aDog.hasOwnProperty('name'));
console.log(aDog.hasOwnProperty('toString'));//hasOwnProperty是判断自身拥有

7.Map[ES6]

JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。
但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。
为了解决这个问题,最新的ES6规范引入了新的数据类型Map
1. [1]初始化Map需要一个二维数组 或者[2]直接初始化一个空Map

var m = new Map([['Me', 95], ['him', 75], ['her', 85]]);//[1]
m.get('Me'); // 95

var m = new Map();
m.set('Me1', 67);
m.set('Her1', 88);
m.get('Me1'); // 88

8.Set

Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在。
要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set:
1. [1]直接创建一个空Set 或[2]使用一个Array初始化

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
s1.add("我是一个元素");//添加
s2.delete(2);//删除2
console.log(s1);
console.log(s2);

2. Set中,没有重复的key

var aSet = new Set([1]);
aSet.add(1);
console.log(aSet);

9.iterable

遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。
1. 具有iterable类型的集合可以通过新的for ... of循环来遍历

var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
    console.log(x); // '0', '1', '2', 'name'包含属性
}

//for of
for (var x of a) {
  console.log(x);//只有 A B C 属性不包含在内 
}

//iterable内置的forEach方法
a.forEach(function (element, index, array) {
    // element: 指向当前元素的值
    // index: 指向当前索引
    // array: 指向Array对象本身
    console.log(element);
});


10.变量

可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量

  • strict模式
    如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:
    在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。
    使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内,同名变量在不同的函数体内互不冲突。
    为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。
    启用strict模式的方法是在JavaScript代码的第一行写上:'use strict';
    这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容