js基础知识02

2.String字符串

所有用单引号、双引号、 反引号(ES6字符串模板)包起来的都是字符串

2.1把其他类型的值转化为字符串

1.[val].toStirng() 2.字符串拼接

1.[val].toStirng()
console.log(a.toString());// '12'
console.log((NaN).toString());// 'NaN'
        
console.log((null).toString());//报错
console.log((undefined).toString());//报错

console.log([].toString()); //''

console.log(({name:18}).toString());//[object Object]

普通对象.toString()的结果是[object Object]

2.字符串拼接

四则运算,除+之外都是数学计算(加法遇见字符串以后所有的运算都是字符串拼接),只有+可能存在字符串拼接。

console.log('10' + 10);//1010
console.log('10' - 10);//0
console.log('10px' - 10);//NaN


let b = 10 + null + true + [12] + undefined + 'hello' + null + [] + 10 + false;
/*
10+0(null)+1(true)=11
11+[12] 此时出现字符串,以后都是字符串拼接
1112+undefined+hello+null+10+false
*/
console.log(b);// '1112undefinedhellonull10false'\

let x =10+undefined+"1111";
console.log(x);//NaN1111

3.Boolean

只有两个值 true/false

3.1把其他值转化为boolean

只有0、NaN、’’(空字符串)、null、undefined这5个值会转化为False,其余都是true。

1.boolean([val]) 2.!/!! 3.条件判断
console.log(Boolean('0'));//true

等价于Boolean(1)
console.log(!!1)  //true

if(1){
.......
}
if('3px'-3){
//'3px'-3 --> NaN--> false
.......
}

4.null // 5.undefined

  • null (手动设置为null才是null)
  • undefined (一般是默认机制,声明未赋值)
    在数值加法中,null代表0,undefined代表NaN
    一般最好用null作为初始值的空值,因为零不是空值,他在栈内存中有自己的存储空间。
let a = null;//null
let num ;//undefined



----------------------------------================================================================================================================================================================================================================================================================================================================================================================================

1.object对象数据类型-普通对象

任何一个对象都是由零到多个键值对组成的。而且属性名不能重复。

1. 获取属性值

1.对象.(点)属性
2.对象[属性]

属性名是数字或者字符串格式的,
如果属性名是数字不能使用 对象.(点)属性的方式来获取。

  let per={
      name:'zhangsan',
      age:20,
      sex:'男',
      
      //属性名可以为数字
      0:100
  };
  
  获取属性值
  对象.()属性
  对象[属性]

  console.log(per.name);  //zhangsan
  console.log(per['name']);  //zhangsan
  console.log(per[name]);  //undefined

  输出0属性
  console.log(per[0]);  //100
  console.log(per.0);  //报错,SyntaxError



  当前属性名不存在,默认的属性值是undefined。
  console.log(per.home);   //undefined

2. 设置属性值(增删改)

    新增属性
   per.high = 100;
   console.log(per.high);  //100
   console.log(per['high']);  //100
   
    修改属性值
    per.name=lisi;
	
	
	删除(真:删除属性,假:属性值为null)
	真:delete per.high;/delete per['high']
	假:per.name=null;
	

2.数组-特殊的对象数据类型

数组是特殊的对象
1. 我们中括号中设置的是属性值,他的属性名是默认生成的数字,从零开始递增arr[0],而且数字代表每一项的位置,我们把其称为索引
索引:从0开始,连续递增。代表每一项位置的数字属性名。
2.天生默认的属性名length,存储数组的长度。

 let arr=[12,'haha',true,77];
 console.log(arr);
 
 console.log(arr.length); //4
 console.log(arr['length']); //4
 
 
 获取数组的最后一项
 console.log(arr[arr.length-1]);
 
 向数组末尾新增内容
 arr[arr.length]=100;

面试题:堆栈内存(stack&&heap)

赋值三步(基本数据类型&&引用数据类型)
1.创建变量
2.创建值
3.变量指向值(关联)

        let a = 12;
        let b = a;
        b = 13;
        console.log(a);//12

        let n = { name: '你好' };
        let m = n;
        m.name='呵呵';
        console.log(n.name); //呵呵

数据类型之间的区别.

栈(stack,基本数据类型)

        let a = 12;
        let b = a;
        b = 13;
        console.log(a);//12

浏览器想要执行JS代码:
1.从电脑内存中分配出一块内存(栈内存=>Stack ),用来执行代码
栈内存:从内存条中分配的内存,来让代码一行行执行

2分配一个主线程用来自上而下执行JS代码(浏览器会开辟一个主线程的)

创建一个变量分为三步

let a = 12;
1.创建变量a,放到当前栈内存变量存储区域
2.创建一个值12,把它存储到当前栈内存值区域
(简单的基本类型值是这样存储的,复杂的引用类型值不是这样做的,)
3.=为赋值,其实赋值是让变量和值相互关联的过程


let b=a;
1.创建变量a,放到当前栈内存变量存储区域
2.
3.=为赋值,其实让b也指向12

b=13;
1.
2.创建一个值13,把它存储到当前栈内存值区域
3.=为赋值,其实让b也指向13

堆(heap,引用数据类型)

        let n = { name: '你好' };
        let m = n;
        m.name='呵呵';
        console.log(n.name); //呵呵

let n = { name: ‘你好’ };
复杂值(引用类型值)的存储,又分成了三个步骤:
1.在内存中分配出一块新内存,用来存储引用类型值(堆内存=>heap ) =>内存有一个16进制地址
2.把对象中的键值对(属性名:属性值)依次存储到堆内存
3.把堆内存地址和变量关联起来(把堆内存的地址存到值存储空间)


let m = n;

1.创建变量m,放到当前变量存储空间
2.
3.=为赋值,让m也指向变量存储空间


m.name=‘呵呵’;
1.
2.将m指向的地址空间的值改为‘呵呵’
3.=为赋值,让m也指向变量存储空间

基本类型&&引用类型

基本类型:直接存在栈内存的值存储空间中,按值操作(直接操作的是值),所以也叫作值类型

引用类型;存在堆内存的存储空间中,操作的是堆内存的地址(按引用地;址操作的)

练习题

let n = [10, 20];  //n=[10, 20]
let m = n;  //m指向n的地址   m=[10, 20]
let x = m; // x指向m的地址   x=[10, 20]
m[0] = 100; // m=[100,20]=x=n

x = [30, 40];  //开辟一个新的堆内存x,指向这个内存区域,此时X与n,m没有关系
 x[0] = 200;  //
m = x;  // m指向x的地址,此时m和n无关,
m[1] = 300;
n[2] = 400; //对象中没有属性名,则新增一个
console.log(n, m, x);// [100, 20, 400]  [200, 300]  [200, 300]

堆栈内存练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值