面试题

2018-08-11  本文已影响21人  ZhongQw

1、去除图片之间的间隙

左右

图片
解决方法:

2、react组件的生命周期


3、react组件的三种创建方式

无状态组件:只是为了创建纯展示组件,只负责根据传入的props来展示, 不涉及到要state状态的操作。
注意:

1、组件不会被实例化,无实例化过程也就不需要分配多余的内存,从而性能得到一定的提升
2、不能访问this对象this.statethis.propsthis.ref都不可使用
3、需要使用父组件的props通过props.xxx来访问
4、组件无法访问生命周期的方法,因为无状态组件是不需要组件生命周期管理和状态管理,所以底层实现这种形式的组件时是不会实现组件的生命周期方法。所以无状态组件是不能参与组件的各个生命周期管理的。

function HelloComponent(props, /* context */) {
  return <div>Hello {props.name}</div>
}
class InputControlES6 extends React.Component {
    constructor(props) {
        super(props);

        // 设置 initial state
        this.state = {
            text: props.initialValue || 'placeholder'
        };

        // ES6 类中函数必须手动绑定
        this.handleChange = this.handleChange.bind(this);
    }

    handleChange(event) {
        this.setState({
            text: event.target.value
        });
    }

    render() {
        return (
            <div>
                Type something:
                <input onChange={this.handleChange}
               value={this.state.text} />
            </div>
        );
    }
}
InputControlES6.propTypes = {
    initialValue: React.PropTypes.string
};

4、git pullgit feach的区别


5、深拷贝和浅拷贝的区别和实现方式。

深拷贝
指针a对指针b进行深拷贝,那么就会重新开辟一个新的内存空间,存放b指针内存空间的内容,俩个职责指针内容完全相同,但是分别存放于不同的内存空间中,所以a发生变化时,b不会发生变化。

深拷贝
function deepClone2(obj) {
  var _obj = JSON.stringify(obj),
    objClone = JSON.parse(_obj);
  return objClone;
}  //但是不能实现对对象方法的拷贝
//使用递归的方式实现数组、对象的深拷贝
function deepClone1(obj) {
  //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
  var objClone = Array.isArray(obj) ? [] : {};
  //进行深拷贝的不能为空,并且是对象或者是
  if (obj && typeof obj === "object") {
    for (key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (obj[key] && typeof obj[key] === "object") {
          objClone[key] = deepClone1(obj[key]);
        } else {
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}
function deepClone(initalObj, finalObj) {
    var obj = finalObj || {};
    for (var i in initalObj) {
        var prop = initalObj[i];
  
        // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况
        if(prop === obj) {
            continue;
        }
  
        if (typeof prop === 'object') {
            obj[i] = (prop.constructor === Array) ? [] : Object.create(prop);
        } else {
            obj[i] = prop;
        }
    }
    return obj;
}
var array = [1,2,3,4];
var newArray = $.extend(true,[],array);
当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

lodash.cloneDeep()

浅拷贝
只是增加了一个指针a,和之前的指针b指向同一块内存。当a发生变化时,b也变化。

浅拷贝是只对指针进行拷贝,两个指针指向同一个内存块,深拷贝是对指针和指针指向的内容都进行拷贝,拷贝后的指针是指向不同内的指针


上一篇 下一篇

猜你喜欢

热点阅读