笔试题相关 一

之一

var a = false + 1;
console.log(a)// 1
// false会通过隐式转换成 0
// 知识点隐式类型转换 true 隐式类型转换为 1 false隐式类型转换为 0

var a = '1' + false;
console.log(a)// '1false'

var b = false == 1
console.log(b) // false
// 比较运算输出bool类型

if(typeof(a) && (-true) + (+undefined) + '') {
    console.log('通过了')
}else {
    console.log('未通过')
}
// 通过了
// 解析:a是undefined,正常是会报错,因为a未定义,但是typeof包裹会将其变成字符串‘undefined’
// 因此返回真 &&运算符 如果遇到真就会继续向下寻找直到遇到假返回当前值 ||运算符相反
// -true会通过隐式转换成-1,+undefined会转换成NaN,NaN同任何一个数字相加都是NaN包括他自己,
// NaN + '' 会转变成字符串‘NaN'(字符串与任何相加都是字符串)

if(1 + 5 * '3' === 16) {
    console.log('通过了')
}else {
    console.log('未通过')
}
// 通过了
// 5*'3'会将’3‘隐式转换成数字类型

console.log(!!' ' + !!'' + !!false  || '未通过了')
// 1
// 解析: 知识点在于能转换成false的几种方式,undefined, null, NaN, 0, -0, ''。除去这些都为true
// !!' '===>true, !!''===>false !!false ===> false, 1+0+0 == 1
// 1 || '通过了'  ||运算符遇到假就会往下走,遇到真就返回当前所以是1

window.a || (window.a = '3')
console.log(window.a)
// 3 
// 解析:优先级问题, 如果说因为 window.a = undefined 为假 继续往下走 返回3就错了
// 括号优先级最高 window.a = ’3‘为真然后回来走||运算,这个时候window.a为真 返回


之二

var fn = (
  function test1() {
      return 1;
  },
  function test2() {
      return '2';
  }
)()
console.log(typeof(fn))

// string
// 解析:逗号是个运算符 只返回后面的那个,因此返回test2()

var a = 10;
if(function b() {}) {
    a+=typeof(b)
}
console.log(a)
//'10undrfined'
// 前面说过除去那六种都为true,因此判断语句会执行。(function b(){}) 有括号会变成表达式,会忽略函数名,
// 因此没有b,b未被定义一般会报错,但是加上typeof就会变成字符串’undefined‘
// a+='undefined' ==> a = a + 'undefined' =>'10undefined'


之三

var name = 'zhangsan'
name += 10;//'zhangsan10'
var type = typeof(name) // string
if(type.length === 6) {// true
    type.text = 'string' // new String(type).text = 'string'
    // delete
}
console.log(type.text)
// undefined
// 解析: 考察点包装类,基础类型调用方法时, 一般逻辑上来说是不可能的,但是后台自动完成了一系列处理
// 1. 创建String类型的一个实例
// 2. 在实例上添加方法
// 3. 销毁这个实例
// 经过处理基本的字符串值就会变得和对象一样了, 同理适用于Boolean, Number.
// 引用类型和基本包装类型区别在于,引用类型在执行流在离开当前作用域之前,会一直存在内存中, 而自动创建的基本包装类型的对象则只存在于代码执行的那一瞬间,然后立即被销毁。这意味着我们不能在运行时为基本包装类型添加属性和方法
// 在type.text = 'string' 时有text属性,然后立即销毁,最后一行代码又创建自己的String对象,而该对象没有text属性
// 红宝书 118-119

function Car(brand, color) {
    this.brand  = 'Benz';
    this.color =  'red';
}
var car = new Car('Mazda', 'blank')
console.log(car)

// 参数没有赋值 ,打印原始值

function Test(a, b, c) {
    var d = 1;
    this.a = a;
    this.b = b;
    this.c = c;
    function f() {
        d++
        console.log(d)
    }
    this.g = f
}
var test1 = new Test()
test1.g()// 2
test1.g()// 3
var test2 = new Test()
test1.g()//2


var x = 1,
    y = z = 0;
function add(n) {
    return n = n + 1;
}
y = add(x) // x = 1 y = 4
function add(n) {
    return n = n + 3;
}
z = add(x) // x = 1  z = 4

console,log(x, y, z)

// 解析:
/*
GO = {
  a: 1,
  y: 0,
  z: 0,
  add:function(n) {return n = n + 1} => function(n) {return n = n + 3} 同名函数覆盖掉
}
y = add(x) ==> 4
z = add(x) ==> 4
*/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值