1. Non-Type and Number Number comparing
把非Number类型隐式转化为Number类型
"10" >9 //true
字符串10在和Number类型比较时会被隐式转化成Number类型
2. comparing strings from
字符串与字符串比较比的是ACSII码值
console.log("我" > "你") //返回true
在ACSII码表里面我的数值要比你的数值大一些
3. comparison operator ==
两边类型相同 可以直接进行比较
NaN == NaN //返回false
两边类型不同 需要把非Number类型隐式转化为Number类型
"10" == 10 //返回true
4.===
如果两边类型不同直接返回false
The mentioned three kinds of casts and 2 implicit type conversions
parseInt() //parseInt() 函数可解析一个字符串,并返回一个整数
parseFloat() //parseFloat() 函数可解析一个字符串,并返回一个浮点数
Number() //Number() 函数把对象的值转换为数字
==
+
6.JS which data type of the return typeof
基本数据类型:String,boolean,Number,Undefined, Null,;
引用数据类型:Object(Array,Date,RegExp,Function)
7. How to determine whether a variable is an array data type
使用Array.isArray
if(typeof Array.isArray==="undefined")
{
Array.isArray = function(arg){
return Object.prototype.toString.call(arg)==="[object Array]"
};
}
8. The difference of undefined data type and -null
null是一个表示"无"的对象,转为数值时为0;
undefined是一个表示"无"的原始值,转为数值时为NaN。
当声明的变量还未被初始化时,变量的默认值为undefined。
null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。
典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
null表示"没有对象",即该处不应该有值。
典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点
undefined 表示不存在这个值。
typeof undefined //"undefined"
undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,
但是还没有定义。当尝试读取时会返回 undefined;
例如变量被声明了,但没有赋值时,就等于undefined
typeof null //"object"
null 表示一个对象被定义了,值为“空值”;
null : 是一个对象(空对象, 没有任何属性和方法);
例如作为函数的参数,表示该函数的参数不是对象;
注意:
在验证null时,一定要使用 === ,因为 == 无法分别 null
9. Introduction of basic data types js
Boolean Number String Undefined Null
JavaScript有几种类型的值?,你能画一下他们的内存图吗
栈:原始数据类型(Undefined,Null,Boolean,Number、String)
堆:引用数据类型(对象、数组和函数)
10. The method of determining what type of use
typeof
instanceof
11. Presentation of built-in objects which js
Object 是 JavaScript 中所有对象的父对象
数据封装类对象:Object、Array、Boolean、Number 和 String
其他对象:Function、Arguments、Math、Date、RegExp、Error
12. How to distinguish arrays and objects
1、从原型入手,Array.prototype.isPrototypeOf(obj);
利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,
如果是,则返回true,否则false。Array.prototype.isPrototype([]) //true
2、也可以从构造函数入手,利用对向的constructor属性
3、根据对象的class属性(类属性),跨原型链调用toString()方法。
Object.prototype.toString.call(Window);
4、Array.isArray()方法
13. The method of determining what type of use
typeof
typeof xxx得到的值有以下几种类型:
undefined boolean number string object function、symbol ,
这里需要注意的有三点:
typeof null结果是object ,
实际这是typeof的一个bug,null是原始值, 非引用类型
typeof [1, 2]结果是object,结果中没有array这一项,
引用类型除了function其他的全部都是object
typeof Symbol() 用typeof获取symbol类型的值得到的是symbol,
这是 ES6 新增的知识点
instanceof
用于实例和构造函数的对应。例如判断一个变量是否是数组,使用typeof无法判断,
但可以使用[1, 2] instanceof Array来判断。因为,[1, 2]是数组,
它的构造函数就是Array。
同理:
function Foo(name) {
this.name = name
}
var foo = new Foo('bar’)
console.log(foo instanceof Foo) // true
There are several types of value 14.JavaScript draw about their memory map
栈:原始数据类型(Undefined,Null,Boolean,Number、String)
堆:引用数据类型(对象、数组和函数)
两种类型的区别是:存储位置不同;
1,原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,
属于被频繁使用数据,所以放入栈中存储;
2,引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,
将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址
当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体
在参数传递方式上,原始类型是按值传递,引用类型是按共享传递
JS 中这种设计的原因是:按值传递的类型,复制一份存入栈内存,
这类类型一般不占用太多内存,而且按值传递保证了其访问速度。按共享传递的类型,
是复制其引用,而不是整个复制其值(C 语言中的指针),
保证过大的对象等不会因为不停复制内容而造成内存的浪费。
15. The difference between == and ===
1.===:三个等号我们称为等同符,当等号两边的值为相同类型的时候,直接比较等号两边的值,值相同则返回true,若等号两边的值类型不同时直接返回false。
例:
100=“100” //返回false
abc=“abc” //返回false
‘abc’=“abc” //返回true
NaN=NaN //返回false
false===false //返回true
2.==:两个等号我们称为等值符,当等号两边的值为相同类型时比较值是否相同,类型不同时会发生类型的自动转换,转换为相同的类型后再作比较。
类型转换规则:
1)如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字进行比较。
2)如果等号两边出现了null或undefined,null和undefined除了和自己相等,就彼此相等
例:
100“100” //返回true
1true //返回true
“1”“01” //返回false,此处等号两边值得类型相同,不要再转换类型了!!
NaNNaN //返回false,NaN和所有值包括自己都不相等。
==比较规则:
数组与数值进行比较,会先转成数值,再进行比较;
与字符串进行比较,会先转成字符串,再进行比较;
与布尔值进行比较,两个运算子都会先转成数值,然后再进行比较。
相等运算符(==)隐藏的类型转换,会带来一些违反直觉的结果,下面整理一些:
0 == '' // true
0 == '0' // true
2 == true // false
2 == false // false
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
' \t\r\n ' == 0 // true
\t \r \n都是转义字符,空格就是单纯的空格,输入时可以输入空格