js笔记
2019-12-05 本文已影响0人
张东山
基本数据类型
- Number (常规字和NaN)
- String (所有用单引号、双引号、反引号(撇)包起来的都是字符串)
- Boolean (布尔boolean true/false)
- null (空对象指针null)
- undefined (未定义undefined)
引用数据类型
- 对象数据类型object
- {} 普通对象
- [] 数组对象
- /^[+-]?(\d|([1-9]\d+))(.\d+)?$/ 正则对象
- Math数学函数对象
- 日期对象
...
- 函数数据类型function
基本数据类型转Number
Number(null) => 0
Number(undefined) => NaN // 不是一个数
/* 只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN,空字符串会变为数字零*/
Number('12.5px') => NaN
Number('12.5.5') => NaN
引用数据类型转Number
/* 把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字 */
console.log(Number({name:'10'}));//=>NaN
console.log(Number({}));//=>NaN
// {}/{xxx:'xxx'} .toString() => "[object Object]" => NaN
console.log(Number([]));//=>0
// [].toString() -> ''
console.log(Number([12]));//=>12
// [12].toString() -> '12'
console.log(Number([12,23]));//=>NaN
// [12,23].toString() -> '12,23'
Number() 与 parseInt()/parseFloat() 的区别?(把其他类型值转化为数字类型)
- Number([val])
- parseInt/parseFloat([val],[进制]):也是转换为数字的方法,对于字符串来说,它是从左到右依次查找有效数字字符,直到遇到非有效数字字符,停止查找(不管后面是否还有数字,都不在找了),把找到的当做数字返回
- ==进行比较的时候,可能要出现把其它类型值转换为数字
let str = '12.5px';
console.log(Number(str)); //=>NaN
console.log(parseInt(str)); //=>12
console.log(parseFloat(str)); //=>12.5
console.log(parseFloat('width:12.5px')); //=>NaN
console.log(parseFloat("")); //=>NaN 因为没找到有效数字字符
parseInt(undefined) ->parseInt('undefined') ->NaN
把其它类型值转换为字符串
- [val].toString()
- 字符串拼接
console.log((NaN).toString()); //=>'NaN' */
// null和undefined是禁止直接toString的
// (null).toString() //=>报错
// 但是和undefined一样转换为字符串的结果就是 'null'/'undefined'
/*普通对象.toString()的结果是 "[object Object]" =>? =>Object.prototype.toString方法不是转换为字符串的,而是用来检测数据类型的*/
({'name': 'guohongjun'}).toString(); // => "[object Object]"
({}).toString(); // => "[object Object]"
把其它类型值转换为布尔类型
只有 0、NaN、''、null、undefined 五个值转换为FALSE,其余都转换为TRUE(而且没有任何的特殊情况)
- Boolean([val])
- !/!!
- 条件判断
基本数据类型和引用数据类型的区别
基本数据类型按值操作,引用类型操作的是堆内存的空间地址
常用的关键字和保留字
- 关键字
- break
- continue
- if
- else
- for
- var / let / const / function / class / import / export
- instanceof
- typeof
- this
- return
- switch
- case
- do
- while
- delete
- new
- ...
- 保留字
- boolean
- float
- int
- double
- long
- char
- debugger
- ...
创建变量的方式
- var / let 创建变量
- const 创建常量
- function 创建函数
- class 创建类
- import 模块导入
console.log(alert(1))
输出 "undefined"
- alert(1):执行浏览器内置的alert方法,执行方法的时候弹出一个"1"(方法的功能),此方法没有返回值(默认返回值undefined)
- console.log(undefined)
i++/++i
let i='10';
i=i+1 =>'10'+1 =>'101'
i+=1 =>'101'
i++ =>i=11 i++和以上两种不完全一样,他是纯粹的数学运算
arguments.callee
/* 阶乘函数 */
function factorial(num) {
console.log(arguments);
if(num<=1) {
return 1;
} else {
return num * factorial(num - 1);
}
}
此时如果执行下面的代码
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //出错!
就会报错了 ,因为在接下来调用 anotherFactorial()时,由于必 须执行 factorial(),而 factorial 已经不再是函数,所以就会导致错误。在这种情况下,使用 argu- ments.callee 可以解决这个问题。arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数 的递归调用。
function factorial(num) {
console.log(arguments);
if(num<=1) {
return 1;
} else {
/* arguments.callee 指向正在执行的函数的指针 */
return num * arguments.callee(num - 1);
}
}