内容简介:null,undefined, boolean, number, string, Symbol, 对象类型。 基本数据类型存储在栈中 复杂数据类型的值存储在堆中,地址存储在栈中伪类 :hover :active :first-child :visited伪元素
null,undefined, boolean, number, string, Symbol, 对象类型。 基本数据类型存储在栈中 复杂数据类型的值存储在堆中,地址存储在栈中
2. null和undefined的区别
- null表示不存在的对象,转为数值时 Number(null) 是0
-
undefined表示缺少值,转为数值时 Number(undefined) 是NaN:
- 当变量声明后未赋值时,默认为undefined
- 调用函数时,应该提供的参数没有提供,该参数等于undefined
- 对象没有赋值的属性,该属性的值为undefined
var a ={}; a.name; // undefined
- 函数没有返回值时,默认返回undefined
var f = f(); f // undefined
3. 判断js数据类型的方式,各自优缺点
- typeof:可准确判断基本数据类型,但null除外,因为 typeof(null) 返回Object;无法准确判断复杂数据类型,亲测返回的都是object
-
instanceof:可准确判断复杂数据类型,但无法准确判断基本数据类型,原理是通过原型链层层查找、判断
var a = 'aaaa'; typeof(a); // string a instanceof String; // false var b = new String(); typeof(b); //Object b instanceof String; // true 复制代码
- constructor: 通过prototype原型上的constructor属性判断 var f = function(){}; f.constructor // Function() 但这种方法不适用于null和undefined,以为他们是无效对象,不存在constructor 此外,函数的 constructor 是不稳定的,会被人为修改prototype,那么原有的 constructor 引用会丢失
-
toString:
该方法是最通用,但是写法最繁琐的
var a = {name:'a', age: 10}; Object.prototype.toString.call(a); //[object Object] var b = [1,2,3]; Object.prototype.toString.call(a); //[object Array] 复制代码
4. 设计模式
-
工厂模式:在函数内创建一个对象,给对象赋予属性和方法后再将对象返回
function Parent(){ var Child = new Object(); Child.name = 'YY'; Child.age = 24; Child.sex = function(){ return '女'; } return Child; } var x = Parent(); console.log(x.name); //YY console.log(x.sex()); //女 复制代码
- 构造函数模式:无需再函数内部重新创建对象, 而使用this指代
function Parent(){ var Child = new Object(); this.name = 'YY'; this.age = 24; Child.sex = function(){ return '女'; } return Child; } var x = new Parent(); console.log(x.name); //YY console.log(x.sex()); //女 复制代码
- 原型模式:函数中不对属性进行定义,利用prototype属性对属性进行定义,可以让所有对象实例共享它所包含的属性及方法。
function Parent(){ Parent.prototype.name="YY"; Parent.prototype.age=24; Parent.prototype.sex=function(){ return '女'; } } var x = new Parent(); console.log(x.name); //YY console.log(x.sex()); //女 复制代码
- 混合模式:原型模式+构造函数模式。这种模式中,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享属性。
function Parent(){ this.name="ZXJ"; this.age=24; }; Parent.prototype.sayname=function(){ return this.name; }; var x =new Parent(); alert(x.sayname()); //ZXJ 复制代码
- 动态原型模式:将所有信息封装在了构造函数中,而通过构造函数中初始化原型,这个可以通过判断该方法是否有效而选择是否需要初始化原型
function Parent(){ this.name="ZXJ"; this.age=24; if(typeof Parent._sayname=="undefined"){ Parent.prototype.sayname=function(){ return this.name; } Parent._sayname=true; } } var x =new Parent(); alert(x.sayname()); 复制代码
5. new一个对象的详细过程: new Person();
1. var obj = {}; //创建一个空对象 2. obj.__proto__ = Person.prototype; //设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象 3. Person.call(obj); //使用新对象调用函数,函数中的this被指向新实例对象 4. 将初始化完毕的新对象地址,保存在等号左边的变量中 复制代码
6. css伪类用一个冒号表示,伪元素则用两个冒号表示
伪类 :hover :active :first-child :visited
伪元素
- ::after
- ::before
- ::first-line //文本的首行添加特殊样式
- ::first-letter //文本的首字母添加特殊样式
7. 垂直居中的几种方案
- 父容器设置
display: table-cell; vertical-align: middle; 复制代码
- flex布局 父容器设置
display: flex; justify-content: center; align-items: center; 复制代码
- 相对定位加transform 自身设置
position: relative; top: 50%; transform: translateY(-50%); 复制代码
- display box 父容器设置
display: -webkit-box; -webkit-box-pack:center; -webkit-box-align:center; -webkit-box-orient: vertical; text-align: center; 复制代码
以上所述就是小编给大家介绍的《前端知识点汇总》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Domain-Driven Design
Eric Evans / Addison-Wesley Professional / 2003-8-30 / USD 74.99
"Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. "His book is very compatible with XP. It is n......一起来看看 《Domain-Driven Design》 这本书的介绍吧!