1.node英文官网为什么可以自己识别电脑系统
因为系统名放在请求头里 user-agent
2.闭包
函数内部包裹函数, 指有权访问另一个函数作用域变量形成的函数
全局变量可以访问函数内部局部变量
延申了变量的作用范围 也就是改变了作用域 不会马上销毁函数局部变量
作用域链得不到释放
3.js中有六种数据类型,包括五种基本数据类型(number,string,boolean,undefined,null),和一种复杂数据类型(object)。
isNaN() 函数用于检查其参数是否是非数字值。
isNaN(123) //false isNaN("hello") //true
存在隐式类型转换
console.log(isNaN('123'));false
NaN不等于自身
console.log(NaN==NaN);false
console.log(NaN===NaN);false
console.log(Object.is(NaN,NaN));true
转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,undefined没有toString()方法)。
null类型被看做空对象指针
4.git add * 上传除了.开始的隐藏文件
git add . 上传包括隐藏文件的所有文件
5.在js中如何判断一个数据类型?
1. typeof 的结果symbol number string boolean undefined object function
console.log(typeof Date());//string
console.log(typeof new Date());//object
console.log(Date());//string
console.log(new Date());//浏览器解析为string
2.instanceof 判断某个变量是否是某个构造函数对应的原型链上的
例如:arr instanceof Array
3.isPrototypeOf 判断某个变量是否是某个原型的子孙后代
例如:Object.prototype.isPrototypeOf(obj)
4.isArray 判读某个变量是否是数组
Array.isArray(arr)
6.隐式类型转换
(1)undefined-》false
var a;
console.log(typeof a);
if(a){
console.log('真');
}else{
console.log('假');
}
undefined
假
2.值为null,0,0.0,NaN,''(空字符串)->false
var a=null;
console.log(typeof a);
if(a){
console.log('真');
}else{
console.log('假');
}
object
假
3.undefined-》NaN
var b=undefined;
console.log(1+b);
NaN
4.null->0
var b=null;
console.log(1+b);
1
5.true->1,false->0
6.undefined->'undefined',true->'true',null->'null',false->'false'
7.其它对象->如果存在这个对象则转换为toString()方法的值,否则转换为undefined
7.显式转换
1.转换为boolean值
Boolean();
2.特例:Number(undefined);//NaN
Number(null);//0
对象转数字:
先找valueOf(){return 对应数据},valueOf()返回对应数据,valueOf()返回是原始值,包装后返回,如果不是原始值,再找自身或原型上的toString(),toString()是原始值,包装后返回,如果不是原始值,报错。
例: var test1={
valueOf(){
return {};
}
}
console.log(Number(test1));//结果NaN,实质上是调用了toString(),返回了[object Object]
3.Boolean(0(/+0/-0)/NaN/false/''/undefined/null);//false
剩下的都是true, Boolean([]/{}/...);//true
4.String()
拼接字符串:如''+{}
+其实也是String()
实质就是调用的toString()方法
对象变字符类型:
和Number()的类似,先看toString(),再看valueOf()
8.toString()
(1 ) null和undefined没有toString()
console.log(undefined.toString());报错
console.log(null.toString());报错
console.log(123.toString());报错
console.log((123).toString());返回结果123,()求值,将123包装
.toString()前的都是包装后的一个实例对象
实质上是调用了Number.prototype.toString()方法,也就是Number.prototype.toString.call()
(2)但是Object.prototype.toString()比较特殊
Object.prototype.toString(各种数据类型的值);返回结果[object Object]
其它的不行,如Number.prototype.toString()
(3) console.log(document.toString());返回结果[object HTMLDocument]//要在浏览器环境运行
console.log(arguments.toString());返回结果[object Arguments]
实质上就是Object.prototype.toString.call(各种数据类型的值);返回结果[object 各种数据类型]
如:console.log(Object.prototype.toString.call(123));返回结果[object Number]
console.log(Object.prototype.toString.call(undefined));返回结果[object Undefined]
console.log(Object.prototype.toString.call(null));返回结果[object Null]
可以封装typeof方法
9.String()
null和undefined有String()
10.js对象与JSON字符串转换
JSON是javascript对象的字符串表示法,它使用文本表示一个js对象的信息,本质是一个字符串
JSON.strignify()
JSON.parse()
- 键值对的方式,属性必须加双引号
- 值不可以是方法函数、undefined以及NAN