JS变量与计算

1、变量分类

JS变量最基本的分类就是【值类型】和【引用类型】

值类型:在内存中存放在“栈”中的数据,数据量比较小的,例如:undefined、string、number、boolean

引用类型:在内存中存放在“堆”中的数据,数据量比较大的占内存的,基于节省内存的机制,栈中仅保留堆地址,例如:object、array、function、null

【typeof】可以区分类型有`number` `string` `boolean` `undefined`(值类型) `function` `object`(引用类型)

【typeof】可以准确区分 值类型,引用类型仅可以区分 对象和函数

值类型:
typeof
undefined // undefined typeof 'abc' // string typeof 123 // number typeof true // boolean

引用类型:
typeof {} // object typeof [] // object typeof null // object 【因为 null 也是引用类型。null 就相当于引用类型中的 undefined
typeof console.log // function
//值类型示例
var a = 100
var b = a
a = 200
console.log(b)

//引用类型示例
var a = {age:20}
var b = a
b.age = 21
console.log(a.age)

2、变量计算

JS 在值类型的运算过程中,特别需要注意和利用【强制类型转换】,使用场景:

- 字符串拼接 “+”
- `==`
- 逻辑运算(`if` `!` `||` `&&`)

1)字符串拼接

var a = 100 + 10   // 110
var b = 100 + '10' // '10010'

2) `==`

100 == '100'   // true
0 == ''  // true
null == undefined  // true

`==`会先试图类型转换,然后再比较,而`===`不会类型转换

1 == '1' // true
1 === '1' // false
0 == false // true
0 === false // false
null == undefined // true
null === undefined // false

   jQuery 源码中的写法,只推荐在一个地方用`==`,其他地方都必须用`===`。这个用`==`的地方就是:

if (obj.a == null) {  // 这里相当于 obj.a === null || obj.a === undefined ,简写形式
}

3)逻辑运算符(`if` `!` `||` `&&`)

//所有经过`if`判断的变量,都会进行逻辑运算的强制类型转换,转换为`true`或者`false`
var a = true if (a) { // .... } var b = 100 if (b) { // .... b强制转换成boolen值:true } var c = '' if (c) { // ....    c强制转换成boolen值:false }
console.log(10 && 0)  // 0
console.log('' || 'abc')  // 'abc'
console.log(!window.abc)  // true

// 判断一个变量会被当做 true 还是 false
var a = 100
console.log(!!a)

日常开发中,以下变量会被转换为`false`

  • - 0
  • - NaN
  • - '' "
  • - null
  • - undefined
  • - false 本身

3、 JS中有哪些内置函数 —— 数据封装类对象 

 `Object` 、`Array` 、`Boolean` 、`Number` 、`String` 、`Function`

 `Date` 、`RegExp` 、`Error`

4、在 JS 中,所有的引用类型都可以自由设置属性

var obj = {}
obj.a = 100

var arr = []
arr.a = 100

function fn() {}
fn.a = 100

5、如何理解JSON

JSON.stringify({a:10, b:20})      //将对象解析成字符串
JOSN.parse('{"a":10,"b":20}')   //将字符串数据转换为 JavaScript 对象

  从 JS 角度回答,`console.log(JSON)`得到`JSON`只是一个对象,有`parse`和`stringify`两个方法;

  json 也是一种数据格式,这一点和 xml 一样。

 

原文地址:https://www.cnblogs.com/shary-blue/p/14021928.html