参考回答:
JS的基本数据类型有字符串,数字,布尔,数组,对象,Null,Undefined,基本数据类型是按值访问的,也就是说我们可以 *** 作保存在变量中的实际的值,
基本数据类型和引用数据类型的区别如下:
基本数据类型的值是不可变的,任何方法都无法改变一个基本类型的值,当这个变量重新赋值后看起来变量的值是改变了,但是这里变量名只是指向变量的一个指针,所以改变的是指针的指向改变,该变量是不变的,但是引用类型可以改变
基本数据类型不可以添加属性和方法,但是引用类型可以
基本数据类型的赋值是简单赋值,如果从一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,引用数据类型的赋值是对象引用,
基本数据类型的比较是值的比较,引用类型的比较是引用的比较,比较对象的内存地址是否相同
基本数据类型是存放在栈区的,引用数据类型同事保存在栈区和堆区
NaN是JS中的特殊值,表示非数字,NaN不是数字,但是他的数据类型是数字,它不等于任何值,包括自身,在布尔运算时被当做false,NaN与任何数运算得到的结果都是NaN,党员算失败或者运算无法返回正确的数值的就会返回NaN,一些数学函数的运算结果也会出现NaN ,
JS的作用域类型:
一般认为的作用域是词法作用域,此外JS还提供了一些动态改变作用域的方法,常见的作用域类型有:
函数作用域,如果在函数内部我们给未定义的一个变量赋值,这个变量会转变成为一个全局变量,
块作用域:块作用域吧标识符限制在{}中,
改变函数作用域的方法:
eval(),这个方法接受一个字符串作为参数,并将其中的内容视为好像在书写时就存在于程序中这个位置的代码,
with关键字:通常被当做重复引用同一个对象的多个属性的快捷方式
undefined与null:目前null和undefined基本是同义的,只有一些细微的差别,null表示没有对象,undefined表示缺少值,就是此处应该有一个值但是还没有定义,因此undefined==null返回false
此外了解== 和===的区别:
在做==比较时。不同类型的数据会先转换成一致后在做比较,===中如果类型不一致就直接返回false,一致的才会比较
类型判断函数,使用typeof即可,首先判断是否为null,之后用typeof哦按段,如果是object的话,再用array.isarray判断是否为数组,如果是数字的话用isNaN判断是否是NaN即可扩展学习:
JS采用的是词法作用域,也就是静态作用域,所以函数的作用域在函数定义的时候就决定了,
看如下例子:
var value = 1;function foo() {console.log(value);}function bar() {var value = 2;foo();}bar();
假设Javascript采用静态作用域,让我们分析下执行过程:
执行foo 函数,先从 foo 函数内部查找是否有局部变量 value,如果没有,就根据书写的位置,查找上面一层的代码,也就是 value 等于 1,所以结果会打印 1。
假设Javascript采用动态作用域,让我们分析下执行过程:
执行foo 函数,依然是从 foo 函数内部查找是否有局部变量 value。如果没有,就从调用函数的作用域,也就是 bar 函数内部查找 value 变量,所以结果会打印 2。
前面我们已经说了,Javascript采用的是静态作用域,所以这个例子的结果是 1。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)