js基础知识——变量*大家对js一定不陌生,入门很简单(常用入门),很多人学习js都是通过网络资源、书籍、课堂等多种途径,但是一些js基础知识往往被大家所遗漏。本章将从js变量类型的角度讲js变量类型*js变量类型分为基本类型(或值类型)和引用类型。值类型包括Number、Boolean、String、undefined、null、Symbol(ES6新增)。引用类型包括Object、Array、Function、Date、RegExp,值类型存放在栈内存中,引用类型数据存放在堆内存中。当复制值类型的数据时,会在栈内存中创建一个新的存储区,用来存放新的变量,这个变量与之前的值无关。例如下面的例子:vara='a'varb=ab='b'console.log(a)//'a'当b的值改变时,a的值不会相应改变。这个很简单,大家都能看懂。再说说引用类型。当一个对象被定义时,一个指针被存储在栈内存中。指针指向对象在堆内存中的存储地址。当复制这个对象赋值给另一个对象时,只是将对象的指针地址赋值给另一个对象变量,它们都指向同一个对象,所以当一个值改变时,另一个值也会随之改变,见下面的例子理解:varobj1={name:'obj1'}varobj2=obj1obj2.name='obj2'console.log(obj1.name)//对于'obj2',可以执行上面的代码,输出'obj2'打印obj1.name时,这是因为对象是引用类型变量。JavaScript内置函数和对象js中有一些内置函数和对象,很多语言都会有内置的方法可以直接调用开发。根据ECMAscript(javascript语法标准)提供的内置函数包括Object、Array、Boolean、Number、String、Function、Date、Regexp和Error。内置对象包括Math和JSON。注意:浏览器提供给我们的只有这些javascript基本语法提供的内置函数和方法,比如Window和Navigator。还有一点就是之前的重点是内置函数而不是内置对象。最后Math和JSON是内置对象。这个在后面的章节讲到原型链的时候就会明白。记住这里就可以了。几个常见问题什么时候用==什么时候用===这个问题大家应该不陌生,在开发或者面试中经常会遇到。所以答案是什么?首先,看到这道题的时候,不要想着哪些情况用==,哪些情况用===。我们首先应该思考这道题背后的知识点。显然,这里的测试是强制类型转换。使用==时,会强制进行类型转换,而使用===时,则不会发生强制类型转换。每个人都应该知道强制类型转换。下面总结一下:0、""、NaN、null、undefined、false在if()的条件判断中都会被转为false。下面的语法可以用来判断一个对象的某个属性是否存在:varobj={}if(obj.name==null){...}//相当于obj.name===null||obj.name===undefined/*该方法只适用于判断对象的属性,不能直接判断变量是否存在*/if(someVal){...}//这里浏览器会报错错误。标准答案是:只在判断对象的某个属性是否存在时使用==,其他都使用===。typeof能否准确判断变量类型这里首先想到的是typeof和变量类型的理解。由于typeof只能区分变量的基本类型,不能准确判断变量类型。undefined--UndefinedBoolean--BooleanNumber--NumberString--String------------Object--ObjectFunction--FunctionArray--Objectnull--Object所以答案是typeof只能判断变量的值类型,无法确定引用类型的变量。如果想准确判断变量的类型,可以在以后原型的章节介绍。
