记录js中一些常用类型值的tips

记录js中一些常用类型值的tips


  var a = [];
  a['13'] = 11;
  a.length; //14

如果字符串键值能被强制类型转换为十进制数字的话,它就会被当做数字索引来处理


js中字符串的值是不可变的,而数组是可变的(字符串不可变是指字符串的成员函数不会改变其原始值,而是会返回一个新的字符串。而数组的成员函数都是在其原始值上进行操作)

  var a = '123';
  var b = [1,2,3];

  a[1] = 's';
  b[1] = 's';

  a;//123
  b;//[1,'s',2]

字符串反转(因为字符串是不可变的,可以先把字符串转换为数组,然后调用数组的反转函数,最后再拼合起来)

  var str = 'abc';
  var res = str.split('').reverse().join('');
  res; // 'cba'

NaN检测(NaN是JavaScript中唯一一个不等于自身的值)

  if(Number.isNaN){//es6可以使用工具函数Number.isNaN()
    Number.isNaN = function(n){
      return n !== n;
    }
  }

值和引用

  var a = 2;
  var b = a; //b是a的值的一个副本
  b++;
  a; // 2
  b; // 3

var c = [1,2,3];
var d = c; //d是[1,2,3]的一个引用
d.push(4);
c; // [1,2,3,4]
d; // [1,2,3,4]

简单值(基本类型值)总是通过值复制的方式来赋值/传递,包括null、undefined、字符串、数字、布尔和ES6中的symbol.
复合值--对象(包括数组和封装对象),和函数,则总是通过引用复制的方式来赋值\传递

var a = [1,2,3];
var b = a;
a; // [1,2,3]
b; // [1,2,3]

b = [4,5,6];

a; // [1,2,3]
b; // [4,5,6]

由于引用指向的是值的本身而非变量,所以一个引用无法修改另一个引用的指向(下面的例子能更好的说明)

 function bar(x){
  x.push(4);
  x; // [1,2,3,4]

  //然后
  x = [4,5,6];
  x.push(7);
  x; // [4,5,6,7]

}
var a = [1,2,3];
bar(a);
a; // 是[1,2,3,4],而不是[4,5,6,7]

我们向函数传递a的时候,实际上是将引用a的一个复本赋值给x,而a任然指向[1,2,3]。在函数里面可以通过引用x来更改数组的值。但x = [4,5,6] 并不会影响a的指向,所以a仍然是指向[1,2,3,4]
我们如果想a的值变为[4,5,6,7],就必须更改x指向的数组,而不是为x赋值一个新的数组

  x.length = 0; // 清空数组
  x.push(4,5,6,7);
  x; // [4,5,6,7]

//现在a的值也为[4,5,6,7]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 你的问题,我答,还是不答? 说实话,着实让我有些纠结。不答,可能你觉得对你不够尊重。答,我此刻没有心情,也不想解释...
    小扬轻轻阅读 257评论 0 0
  • 在我的身边,爱读书的朋友太少太少,能够写点东西的更是凤毛麟角。七十天,不算短的日记,结识了一群同频的小伙伴,大家有...
    向晚的微风阅读 398评论 3 8