JS基础知识(一)

一、比较运算符

1、 有两种比较远算符:

== :会自动转换数据类型再进行比较,有时会出现很诡异的结果。

=== :它不会转换数据类型,如果数据类型不一致,则会返回false,如果一致再比较。

由于javascript这个缺陷,不要使用“==”进行比较,要坚持使用“===”。

2、 NaN 属性是代表非数字值的特殊值(Not a Number)。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。NaN这个特殊的Number与其他任何值都不相等,包括它自己:

NaN === NaN;  //false

唯一能判断NaN的方法是通过isNaN() 函数(isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况)

isNaN(NaN);    //true

这里需要注意当除数或者被除数是0的情况,被除数是0结果为NaN,除数是0结果为Infinity

2 / 0;  // Infinity

0 / 0;  // NaN

3、浮点数的比较

1/3 === (1 - 2/3);  //false

这个不是javascript的设计缺陷,而是因为浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。所以要比较两个无限循环小数是否相等,只能计算它们之差的绝对值看是否小于某个阈值。

Math.abs(1/3 - (1 - 2/3)) < 0.0000001;  //true

4、形如javascript这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量的时候必须指定变量类型,如果赋值的时候类型不匹配就会报错。例如java就是静态语言。

5、strict模式

JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:

i = 10;        // i现在是全局变量

在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。

使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内,同名变量在不同的函数体内互不冲突。

为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。

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

'use strict';

这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。

不用“var”申明的变量会被视为全局变量,为了避免这一缺陷,所有的javascript代码都应该使用strict模式。

6、多行字符串

多行字符串用’\n’来分隔比较麻烦,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 `……` 表示:

`这是

一个

多行

字符串`;

7、操作字符串

获取字符串中某个字符,可以采用数组下标索引的方式

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

var s = “hello, world”;

s.indexOf(“world”); //返回7

s.indexOf(“World”); //返回-1

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

var s = “hello, world”;

s.substring(0,5);  //从索引0开始到5(不包括5),返回“hello”

s.substring(7);    //从索引7开始到结束,返回“world”

8、数组

直接给array的length赋一个新值会导致array的大小变化:

var array = [1,2,3];

array.length;  //3

array.length = 6;  //array变为[1,2,3,undefined,undefined,undefined]  undefined不显示

array.length = 2;  //array变为[1,2]

array可以通过索引把对应元素的值改为新值,对索引赋值可以直接修改这个array,但是如果赋值的索引超过了数组的范围,将会导致array大小的变化(大多数语言不允许直接改变数组大小,越界访问索引会报错。在编写代码的时候,不建议直接修改数组大小,在访问索引时,要确保索引不会越界):

var arr = [1,2,3];

var arr[1] = 4;    //arr变为[1,4,3]

var arr[5] = x;    //arr变为[1,4,3,undefined,undefined,’x’]

indexOf:

与String类似,Array也可以通过indexOf来获得一个指定元素的位置:

var arr = [10,20,’30’,’abc’];

arr.indexOf(10);    //元素10的索引为0

arr.indexOf(30);    //元素30没有找到,返回为-1

arr.indexOf(’30’);  //元素’30’的索引为2;

(4)slice:

类似String的subString(),截取Array的部分元素,返回一个新的Array(对于起止参数,包括开始索引但不包括结束索引):

var arr = [0,1,2,3,4,5,6,7];

arr.slice(0,3);    //从索引0开始到索引3结束,但是不包括索引3:[0,1,2]

arr.slice(3);      //从索引3开始到结束:[3,4,5,6,7]

var copy = arr.slice(); //从索引0开始到结束:[0,1,2,3,4,5,6,7],

//利用这一点,可以快速的复制数组

copy === arr;      //false

这里有一个指针的概念需要注意一下:

var arr2 = arr1;    //指针相同

var arr2 = arr1.slice();    //指针不同

可以自己运行一下以下这个小程序测试一下

var arr1 = [1,2,3,4,5,6,7];

var arr2 = arr1;

arr1[3] = 10;

alert(arr1 == arr2);

alert(arr2);

var arr3 = arr1.slice();

arr1[3] = 10;

alert(arr1 == arr3);

alert(arr3);

(5)push和pop:

push()向数组的末尾添加若干元素,返回值为数组的长度,pop()则把数组的最后一个元素删掉,返回值为删除的元素:

var arr = [1,2];

arr.push(‘A’,’B’);  //返回数组的长度为4,数组为[1,2,’A’,’B’]

arr.pop();      //返回’B’,数组为[1,2,’A’]

…          //连续pop

arr.pop();      //返回1,数组为[]

arr.pop()      //空数组继续pop不会报错,而是返回undefined,数组依然为[]

(6)unshift和shift:

unshift()向数组的头部添加元素,返回数组的长度,同push;shift()删除数组的第一个元素,返回值为删除的元素,同pop

(7)sort:

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

var arr = [5,9,3,1];

arr.sort(); //arr为[1,3,5,9]

(8)reverse:反转数组元素

var arr = [‘A’,’B’,’C’];

arr.reverse();      //数组为[‘C’,’B’,’A’]

(9)splice:

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

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];

// 从索引2开始删除3个元素,然后再添加两个元素:

arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']

arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

// 只删除,不添加:

arr.splice(2, 2); // ['Google', 'Facebook']

arr; // ['Microsoft', 'Apple', 'Oracle']

// 只添加,不删除:

arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素

arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

(10)concat:

把当前数组与另一个数组拼接起来,返回一个新的数组

注意:concat并没有修改当前数组,而是返回了一个新的数组,实际上concat()方法可以接收任意个元素和数组,并自动把数组拆开,然后全部添加到新的数组里面。

var arr = ['A', 'B', 'C'];

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

(11)join():

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

var arr = ['A', 'B', 'C', 1, 2, 3];

arr.join('-'); // 'A-B-C-1-2-3'

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

推荐阅读更多精彩内容

  • 基础入门 1、基本语法(注意:js严格区分大小写) 定义变量(字符串尽量使用单引号) 赋值 判断语句 循环语句 注...
    httIsHere阅读 287评论 0 0
  • 前言:最近在前端这块,发现自己生疏了,连最基本的js都忘的差不多了。于是趁着周末,参考了廖雪峰老师的JS教程以及自...
    SkyLine7阅读 617评论 0 2
  • JS基础讲解 JavaScript组成ECMAScript:解释器、翻译DOM:Document Object M...
    FConfidence阅读 568评论 0 1
  • 基础复习笔记 JS效果三要素: 时间 事件 运动轨迹(分步骤来实现先死后活法逐步来) (1)获取元素 : getE...
    2e9a10d418ab阅读 376评论 0 3
  • 注:本文所有知识点总结或摘抄自廖雪峰javascript教程,点击查看更详细的讲解。 1.javascript简介...
    hanyuntao阅读 522评论 0 13