JavaScript细节基础(一)

139 阅读2分钟

变量类型

● 值类型 vs 引用类型

//基本类型             直接开辟一个新空间,然后赋值给你
var a = 100
var b = a 
a = 200
console.log(b) // 100

//引用类型           并不是拷贝一份值然后赋值给你  是给你一把同一个房间的钥匙
var c = {age:100}         
var d = c            // 把C的引用地址给了B
d.age = 200          //拿到了C的引用地址 就相当于拿到了C房间的钥匙,可以随便修改房间的东西 
console.log(c.age) //200

//这样设计的原因是节省空间
//引用类型 : 对象、数组、函数

● typeof 运算符

//typeof只能区分基本(值)类型
console.log(typeof undefined) //undefined
console.log(typeof 'acb') //string
console.log(typeof 123) //number
console.log(typeof true) //boolean
console.log(typeof NaN) //number
 
//除了 function 以外, 其他引用类型分不出来
console.log(typeof console.log) //function
console.log(typeof {}) //object
console.log(typeof []) //object
console.log(typeof null) //object

变量计算 - 强制类型转换

● 字符串拼接

var a = 100 + 10
var b = 100 + '10'
console.log(a);  //110
console.log(b);  //10010           字符串拼接

● = = 运算符

console.log(100 == '100')  // true
console.log(0 == '')      // true      == 会把 0 和空字符串转为false  这里相当于 false == false
console.log(null == undefined)  // true  和上面一样 null 和 undefined  都会被转为false

● if 语句

var a = true
if (a) {
    console.log('a = true')
}

var b = 100
if (b) {                          // if 会强制把b转为一个布尔值 b会变成true
    console.log('b = true')     //会输出
}
var c = ''                    //空字符串会被转为false
if(c){
    console.log('c = true')         //不会输出
}

var d = 0                        // 0 会被转为false
if(d){
    console.log('d = true')       //不会输出
}
//在if(...) 中 0、NaN、''、false、null、undefined、 会被转为false

● 逻辑运算

console.log(10 && 0) //0       10会被转为true  并且(&&)语句 前一个是true 直接抛出后面
console.log('' || 'abc') //abc     空字符串转为false  或者语句(||) 前一个false ,抛出后面的
console.log(!window.abc) //true    window没有abc属性,所以是undefined ,undefined取非 ,所以就变成true了

var a = 100
console.log(!!a)  //true  加两个非 强制转为布尔值

var b = ''
console.log(!!b) //false

var c = 0
console.log(!!c) //false

何时使用 === 和 ==

// 问题: 何时使用=== 和 ==

if(obj.a == null){
    //这里相当于 obj.a === null || obj.a === undefined ,简写形式
    //这是jquery源码中推荐的写法
}
或者
function obj (a,b){
        if(a == null){
            
        }
    }
//除了这个以外,其他全用 === 来写
// === 不会强制进行类型转换

JS中的内置函数

// js中有哪些内置函数  —————— 数据封装类对象

Object
Array
Boolean
Number
String
Function
Date
RegExp
Error

如何理解JSON

//问题: 如何理解JSON
// JSON 只不过是一个 JS 对象而已
// JSON也是一种数据格式

console.log(JSON.stringify({a:10,b:20}))     //把对象变为字符串

console.log(JSON.parse('{"a":10,"b":20}'))     //把字符串变为对象