摘要:严格模式是引入的一个概念。目的是使中的不确定行为得到处理,一些不安全的行为也会抛出错误。它的支持版本比较高,标识符就是函数变量属性的名字。函数只能用于函数中,立即退出函数并返回值。
前言:刚毕业的应届生,学习前端时间并不长,昨天参加面试,一轮笔试,两轮技术面试。尤其在技术面试的时候感觉到自己基础知识还是搞的有些乱,也突然明白到了一个扎实的Js基础对于之后的路是有多重要。准备把Js高级程序设计的重点知识从头梳理一遍。特此记录一下自己学习的一些自认为比较重要的笔记。看似最难走的路,可能却是最快也是最稳的。1.严格模式
是ECMAScript5引入的一个概念。目的是使Ecma3中的不确定行为得到处理,一些不安全的行为也会抛出错误。它的支持版本比较高,IE10+2.标识符
就是函数、变量、属性的名字。标识符不能用保留字和关键字,使用关键字会导致identitierExpected错误,保留字看特定引擎报错3.变量
Js变量是松散类型的,可以用来保存任何类型的数据。
如果变量定义在函数中,那么这个变量在函数退出后就会被销毁。
e.g.
function test() { var msg = "hi"; } console.log(msg) // 报错
检查一个错误:
报错message未定义,为什么呢?
答:因为没执行啊
ECMA中一共有5种简单数据类型(基本数据类型)数据类型:undefined null boolean string number,1种复杂数据类型:Object
Null : 就记住他叫空对象指针就行,所以typeof 是 Object。在定义一个暂时不用的对象变量时候,最好将这个变量赋值为null,体现出了它的概念特性,也区分了它和undefined的不同。
Boolean:if这种流控制语句,会自动将括号里的内容进行Boolean()操作
Number: NAN 表示应该返回数值的操作最后没有返回数值,比如说2/"i",2/0不是NAN,是Infinity。第二点:NAN与任何值都不相等, 包括NAN。有一个函数isNaN(),这个函数的具体思路为:先看能不能转化成数值(10,"10",Boolean),如果能则返回flase,不能的话返回true。理解number和parseInt的区别:parseInt("")是NAN,而Number是0;parseInt遇上非数字字符会停止,而Number直接NAN,比如小数点;
String:数值,布尔值,对象,和字符串都有toString()方法。只有number下的toString方法有第二个参数,表示转化成几进制后的值,其实有个String()方法更好一些,如果是null返回null,如果是undefined返回undefined,如果不是这两个将默认使用toString()方法;另外一个小技巧,把某个值转化为字符串直接用+""就可以了
Object:Object每个实例都存在一些属性和方法:constructor,hasOwnproperty,toString …
5.操作符
一元操作符(++,--,+,-)
如果对于字符串进行操作,会返回NAN
s1 = +s1 ->相当于把s1转化成数值型(前提看s1之前是什么类型,规则不同)
s1 = -s1 ->相当于把s1转化成数值的同时变成了负值
位操作符
按位非(~)
var num1 = 25;
var num2 = ~num1
按位或(|)
按位与(&)
按位异或(^)
逻辑操作符:逻辑操作符都是短路操作,如果第一个操作能决定结果,就不执行第二个操作
加减法操作符
注意以下问题:"a:"+1+2 //应该输出a12而不是a3
var result1 = 5 - "true" //4
Var result2 = NaN -1 //NaN
Var result3 = 3 - "" // 3
Var result4 = 3 - "2" // 1
关系操作符:
如果在关系操作符比较中,有一个值是数值,那么另一个值也会被强制转换成数值,如:
Var result = ‘23’ < 3 //true var result = ’23’ < ‘3’ //false
任何操作数与NaN比较都是false
Var result1 = NaN < 3 //false
Var result2 = NaN >= 3 //false
相等操作符
==和!=是先进行转换再比较
===和!==是不转换直接进行比较
所以由于相等(== !=)存在数据类型的转换问题,为了保持代码类型的严谨性最好用 ===,还有一个细节,如果用相等符号进行比较,虽然比较的过程中可能会进行类型的转换,但不影响最终的变量类型e.g:
var strEg = "1"; if(strEg == 1){ console.log(typeof strEg) // string } console.log(typeof strEg) // string6.语句
1.label,continue和break
break是立即退出当前层的循环,continue是重新开始下一层的循环,开始下一层的循环,例子
var num = 0; for(var i=0;i<10;i++) { for(var j=0;j<10;j++) { if(i == 5 && j == 5) { break; //TODO:95 // continue; //99 } num ++ } }
label和continue,break连用,可以起到在那层退出(break)或在那层强制执行下次循环(continute)作用,例如
var num = 0; Outermost: for(var i=0;i<10;i++) { for(var j=0;j<10;j++) { if(i == 5 && j == 5) { break Outermost; } num ++ // 55 } } var num = 0; Outermost: for(var i=0;i<10;i++) { for(var j=0;j<10;j++) { if(i == 5 && j == 5) { continue Outermost; } num ++ // 95 } }
2.with语句
会导致性能下降,一般不用。为什么不能直接用对象代替呢?
3.switch语句
switch语句中的条件判断是全等操作,没有类型转换的操作。
7.函数1.Return:只能用于函数中,立即退出函数并返回值。不能用在if,for的代码块中。如果return的值为空,则立即停止执行函数,并返回undefined
2.传递的参数和arguments并不是同一个内存空间,只是他们的值是同步的,同时argument的长度是由执行时传入的参数决定的,而不是定义时决定的。
3.没有重载
这篇只是一些简单的基础知识点,之后会把这些细小知识点分别展开写成文章
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96482.html
JavaScript 中的数据类型 JavaScript 有 5 种简单数据类型:Undefined、Null、Boolean、Number、String 和 1 种复杂数据类型 Object 。 基本类型(值类型) Undefined Null Boolean Number String 复杂类型(引用类型) Object Array Date RegExp Function 基本包装类...
摘要:一数据类型基本类型引用类型类型判断返回结果未定义布尔值字符串数值对象或者函数拓展堆栈两种数据结构堆队列优先,先进先出由操作系统自动分配释放,存放函数的参数值,局部变量的值等。 一、数据类型 基本类型:`Null Boolean String Undefined Number(NB SUN)` 引用类型:`Array Function Object` 类型判断:typeof 返回结果...
摘要:异步本质上应该就是多线程语言的产物。如果是多线程的异步,假死的应该是运行方法的线程,而方法仍然会按预期打印出。当然了,按我个人的理解,应该说是是的回调函数。 引子 每个故事都有由来。前两天在看 gulp 的时候,看到了它有个 promise 的玩意儿,然后的然后,这两天就掉进了 javascript 的异步和回调的坑里面去了。 其间搜索了 javascript promise,看到了...
摘要:举个例子在上面的例子可以看到,我们声明是一个数字,但是我们在之后将的值又改成了字符串和布尔值后面会讲这些类型。基本类型字符串表示一个字符串,如。因此,我们可以写一个函数,用来精确检测类型。 showImg(https://segmentfault.com/img/remote/1460000017309509?w=850&h=572); 定义 1. 什么是数据类型? 数据类型,就是将...
阅读 865·2021-11-15 11:37
阅读 3603·2021-11-11 16:55
阅读 3270·2021-11-11 11:01
阅读 998·2019-08-30 15:43
阅读 2743·2019-08-30 14:12
阅读 680·2019-08-30 12:58
阅读 3388·2019-08-29 15:19
阅读 2023·2019-08-29 13:59