js基础

一、数据类型

1.js内置数据类型(7种):string、number、boolean、undefined、null、symbol、object

(function和array属于object的子类型)

2.可使用typeof判断不同类型。 

   特殊:typeof  null  === 'object'

              typeof  function(){} === 'function'

              对于未声明和未赋值的变量,typeof都返回undefined,阻止了报错,是个安全的防范机制。

3.null:空值。 是一个特殊关键字,不是标识符,我们不能将其当作变量来使用和赋值。

  undefined :未赋值。是一个标识符,可以被当作变量来使用和赋值。

 

二、NaN:不是数字的数字

  var a = 2/'a';
  var b = 'b';
  console.log(a); //NaN
  console.log(b); //b

1.window.isNaN判断是否为NaN,在非数字类型的情况下也返回true(缺陷)

console.log(isNaN(a)); //true
console.log(isNaN(b)); //true

2.Number.isNaN(es6)在非数字类型的情况下也返回false(修改了window.isNaN缺陷)

console.log(Number.isNaN(a)); //true
console.log(Number.isNaN(b)); //false

3.完善Number.isNaN:

(1)判断是否为NaN方式一:为NaN有两个条件:是number类型和不为数字

if(!Number.isNaN) {
    Number.isNaN = function(n) {
      return (typeof n === 'number' && window.isNaN(n));
    }
}

(2)判断是否为NaN方式二:NaN不等于自身(js中唯一一个不等于自身的值)

if(!Number.isNaN) {
    Number.isNaN = function(n) {
      return n != n;
    }
}

三、对象的引用

1.对象直接赋值,进行浅拷贝

  var array = [1,2,3];
  var array1 = array;  //复制了array的引用
  array1[0] = 0;
  console.log(array);   //[0,2,3] 浅拷贝
  console.log(array1);  //[0,2,3] 浅拷贝

2.当两个变量的指向相同时,两个变量值的改变互相关联

  array1.push(4); //[0,2,3,4]
  console.log(array);   //[0,2,3,4]
  console.log(array1);  //[0,2,3,4]

3.当两个变量的指向不同时,两个变量值的改变互不相关

  array1 = [4,5,6];
  console.log(array);   //[0,2,3,4] 
  console.log(array1);  //[4,5,6]
  array1.push(7);
  console.log(array);   //[0,2,3,4] 
  console.log(array1);  //[4,5,6,7]

4.例子:

function foo(x) {
    x.push(4);
    console.log(x);  //[1,2,3,4]
    x = [4,5,6]; 
    x.push(7);
    console.log(x); //[4,5,6,7]
}
var aa = [1,2,3];
foo(aa); 
console.log(aa); // [1,2,3,4]

解析:

  对象的实际值是在堆中,栈中存放的是引用地址。
  foo(aa)时,aa赋值给x,x的引用地址和aa是一样的(直接赋值是浅拷贝)
  x.push(4)时,引用地址指向的实际值改变为[1,2,3,4],这时候x和aa的值都为[1,2,3,4]
  x = [4,5,6]时,x的引用地址改变了,aa的引用地址并没有变化
  x.push(7)操作的是新的引用地址指向的值,跟旧的引用地址指向的值无关,所以aa依旧为[1,2,3,4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值