作者:Dmitri Pavlutin 译者:前端小智 来源:dmitripavlutin 在 ES6 之前,JS 中的对象字面量(也称为对象初始化器)是非常基础的。...不幸的是,字面量的局限性不允许用一个简单的解决方案来实现这一点。必须结合使用object.create() 和对象字面量来设置原型。...image.png 在对象字面量中只能使用__proto__一次,否则 JS 会报错: var object = { __proto__: { toString: function() {...3.1 super 使用限制 super 只能在对象字面量的简写方法定义内使用。...此限制在很大程度上不影响对象字面量的声明方式。 由于语法较短,因此通常最好使用简写方法定义。 4.计算属性名 在 ES6 之前,对象初始化使用的是字面量的形式,通常是静态字符串。
字面量( Literal )就是我们所说的常量概念,如文本字符串、被声明为final的常量值等。...记住:String Pool 中存的是 引用值,而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的。...而当类加载到内存中后,jvm就会将 class常量池 中的内容存放到 运行时常量池 中,由此可知,运行时常量池 也是每个类都有一个。...在上面我也说了,class常量池 中存的是字面量和符号引用,也就是说他们存的并不是对象的实例,而是对象的符号引用值。...,字面量包括字符串,基本类型的常量。
我们回顾下 Java 创建对象的方式,一共就这么几种 你说它创建了两个对象,那你告诉我除了 new 出来那个对象外,另外一个对象怎么创建出来的?...第三步:执行String s2 = "1",此时因为常量池中已经存在了字面量 1 的对应字符串实例的引用,所以,这里就直接返回了这个引用并且赋值给了局部变量 s2。对应的内存状态如下: ?...直接将具体的字符串实例放到了字符串常量池中,而在我上面的图中,字符串常量池存的永远时引用,它的图是这样画的 ?...而当类加载到内存中后,jvm 就会将 class 常量池中的内容存放到运行时常量池中,由此可知,运行时常量池也是每个类都有一个。...在上面我也说了,class 常量池中存的是字面量和符号引用,也就是说他们存的并不是对象的实例,而是对象的符号引用值。
我的理解:比如说 String myName = "Cherish";这个Cherish字符串一旦被创建,就会存到内存上某个地址如 0x58 处,然后这个字符串会被放到String Pool中,之后你再传建一个...String yourName = "Cherish",那么,这个yourName将不会重新分配一块内存并把Cherish存进去,而是,直接指向前面创建的 “Cherish”的内存,以后无论你创建多少个...“Cherish”字符串,他都是指向最初的那个“Cherish”的地址。...synchronized 进行同步; StringPool (面试考察点 new String(“xxx”)和 直接 = “xxx”的区别) 字符串常量池(String Pool)保存着所有字符串字面量...(literal strings),这些字面量在编译时期就确定。
概述 JavaScript中: js中的对象就是生活中对象的一个抽象, 没有特征和行为,取而代之的是有对应的属性和方法; var stu = { name : '张三',...逗号隔开,记住 : 以后再 {} 内一行一行的都是用, 隔开 创建对象 对象字面量 字面量创建对象是最简单的一种方式,语法格式如下 {属性名1:属性值1,属性名2:属性值2,....}...对象字面量以大括号{}定界,其中存储了若干组数信息,每组数据信息已逗号隔开,每组数据内部已冒号:分割,冒号两边分别是属性名和属性值。...变量在存储简单类型的时候,存的是值本身(值类型) 变量在存储复杂数据类型的时候,存的是引用,也叫地址(类型) 值类型的存储 变量存储数据的时候,存储的直接就是这个值本身。基本数据类型存放在栈内存中。...,对象随机存在内存中,会有一个地址,变量存储的仅仅是这个对象的地址。
对象字面量 JS中创建对象最原始的方式有两种: 方式一 对象字面量 var person = { name: "leon", age: "20", greeting: function...JS 中创建一个函数,把创建新对象、添加对象属性、返回对象的过程放到这个函数中,用户只需调用函数来生成对象而无需关注对象创建细节,这叫工厂模式: function createPerson(name,...; }; return person; } var person1 = createPerson("leon", "20"); 优缺点 优点:工厂模式解决了对象字面量创建对象代码重复问题,创建相似对象可以使用同一...,节约内存。.../person.js"; let person = new Person("小明", "18"); person.showinfo(); 上面代码中用对象字面量的形式重写了原型对象
,只有指向同一个字符串对象的才会是true,否则就算字符串值相同也可能出现不相等的情况。...2.1 字面量的形式 对于第一种是字面量,Java将其存在常量池中,在Java1.6的版本中是在栈的常量池中,在1.7、1.8版本中将其放到了堆的常量池中。...如果你会修改编译器源码,你将上面的判断条件改成<=65535,这样你存一个65535个字符"a"的字符串就不会编译出错了。...3 总结 3.1 字面量的形式 受字节码数据结构的限制,字符串使用MUTF-8编码后字节数不超过65535 拉丁字符,受Java编译器代码限制,最多只能存储65534个字节 非拉丁字符,最多存储65535...个字节 3.2 new的形式 受虚拟机指令限制,字符数理论上线是Integer.MAX_VALUE,但是实际上有保留头信息的部分,所以会略小 受堆内存的限制,如果堆内存很小,那就不能超过堆内存的限制 看起来本文有点过于追求细节了
学生对象: // 特征 : 名字,性别,身高,体重 // 行为 : 吃饭、睡觉、敲代码 2. js的对象 属性+方法 3...."上网" } 对象的场景 : 京东 创建对象-1 (2种方式 单创) 单纯的创建一个对象 ###对象字面量 字面量 : 直接量,,,通过看数值,,直接看出来类型的 ,或者不需要通过创建, 11, '234...//所有创建出来的对象都有: //name //age //hobboy function Teacher(name, age) { //构造函数内部的this指向的是新创建的那个对象...变量在存储简单类型的时候,存的是值本身(值类型) 变量在存储复杂数据类型的时候,存的是引用,也叫地址(类型) 值类型的存储 变量存储数据的时候,存储的直接就是这个值本身。...引用类型的存储 复杂类型: 变量不会存这个对象,对象随机存在内存中,会有一个地址,变量存储的仅仅是这个对象的地址。
我们用了类型编程的那个函数通过这种方式写就不会报错了。 我们使用下看看: 咋返回值的类型不对呢? 其实这时候匹配的函数类型是对的,只不过推导出的不是字面量类型。...但还有个问题,如果不是直接传入字面量,是推导不出字面量类型的,这时候貌似就不对了: 可我们不都声明重载类型了么?...非字面量的情况,类型是 number[],能匹配 unknown[] 的那个类型,所以那个函数类型生效了。...而字面量的情况,推导出的是 readonly [1,2,3],带有 readonly 所以不匹配 unknown[],继续往下匹配,就匹配到了带有类型参数的那个函数类型。...as const 能够让字面量推导出字面量类型,但会带有 readonly 修饰,可以自己写映射类型来去掉这个修饰。
#字面量创建对象 我们通常创建一个对象无非就两种方式: 1. var obj= new Object();//new 一个Object的实例 2. var obj= {};//对象字面量 使用对象字面量...为了简便,一般推荐使用使用字面量:var o= {}; #构造函数创建对象 当我们想要创建自定义的对象时,需要用到构造函数。 构造函数和普通函数有两个区别: 1....那我们能不能让所有的实例对象都共同使用一个sayName方法,来节省内存,提升效率呢?这需要我们先理解原型对象的概念。 #原型对象 我们先了解原型对象的概念。...Object.prototype 刚才我们说了创建对象的两种方式:字面量创建对象和使用new操作符创建对象。 这两种方式创建出来的对象都会继承Object.prototyoe上的方法。...比如,我们使用字面量新创建一个对象o: var o = {value: 1}; o.toString();//"[object Object]" //查找过程: o --> o.
基本数据类型) 2. 2.2 数字型 Number 2.2.3 字符串型 String 2.2.4 布尔型 Boolean 2.2.5 Undefined和NULL 2.3 获取变量数据类型 2.4 字面量...var age;// 声明一个age变量 var是一个JS关键字,用来声明变量(variable)。使用该关键字声明变脸后,计算机会自动为变量分配内存空间,不需要干预。...字面量是在源代码中一个固定的表示法,表示如何表达这个值 字符串字面量:‘前端’,“程序员” 数字字面量:4,9,7 布尔字面量:true,false 2.5 数据类型转换 通俗来说就是把一种数据类型的变量转换成另外一种数据类型...创建数组 var arr = new Array(); // 创建一个空的数组 利用数组字面量创建数组 // 使用数组字面量创建空的数组 var arr = []; // 使用数组字面量方式创建带初始值的数组...语法,是js对象的字符串表示法,但JSON格式仅仅是一个文本,可以被任何编程语言读取来作为数据格式传递。
如果已经有了值为”abc”的地址,则查找对象o,并 回o的地址。 (3)将str指向对象o的地址。 值得注意的是,一般String类中字符串值都是直接存值的。...创建了两个对象。两个引用分别指向不同的两个对象。 以上两段代码说明,只要是用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。...x=new int[3];将在堆内存中分配3个保存 int型数据的空间,堆内存的首地址放到栈内存中,每个数组元素被初始化为0。...;//编译通过 可见,final只对引用的”值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。...这时,s不指向原来那个对象了,而指向了另一个String对象,内容为”Hello world!”,原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
如果已经有了值为"abc"的地址,则查找对象o,并 回o的地址。 (3) 将str指向对象o的地址。 值得注意的是,一般String类中字符串值都是直接存值的。...创建了两个对象。两个引用分别指向不同的两个对象。 以上两段代码说明,只要是用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。...x=new int[3];将在堆内存中分配3个保存int型数据的空间,堆内存的首地址放到栈内存中,每个数组元素被初始化为0。...; //编译通过 可见,final只对引用的"值"(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。...这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
4 float类型字面量 CONSTANT_Long 5 long类型字面量 CONSTANT_Double 6 double类型字面量 CONSTANT_Class 7 对一个类或接口的符号引用 CONSTANT_String...而当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,运行时常量池也是每个类都有一个。...class常量池中存的是字面量和符号引用,也就是说他们存的并不是对象的实例,而是对象的符号引用值。...注意它只存储对java.lang.String实例的引用,而不存储String对象的内容。 注意,它只存了引用,根据这个引用可以得到具体的String对象。...参考资料 深入理解String#intern new String(“字面量”)中的字面量是何时进入常量池的 java几种常量池的区分 java 中 new String(“字面量”)中”字面量”是什么时候进入字符串常量池
2.同时保存在栈内存和堆内存 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。...3.比较是引用的比较 当从一个变量向另一个变量赋引用类型的值时,同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。...var a={age:20}; var b=a; a = 1; b // {age:20} 上面代码中,a 和 b 指向同一个对象,然后 a 的值变为 1,这时不会对 b 产生影响,b 还是指向原来的那个对象.../true 关于数组的类型判断,还可以用 ES6 新增Array.isArray() Array.isArray([]); // true instanceof 三大弊端: 对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建的是有一定的区别的...,也是标准的 Number 这个类的一个实例;对于字面量方式创建出来的结果是基本的数据类型值,不是严谨的实例,但是由于 JS 的松散特点,导致了可以使用 Number.prototype 上提供的方法。
2.同时保存在栈内存和堆内存 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。...3.比较是引用的比较 当从一个变量向另一个变量赋引用类型的值时,同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。...var a={age:20};var b=a;a = 1;b // {age:20} 上面代码中,a和b指向同一个对象,然后a的值变为1,这时不会对b产生影响,b还是指向原来的那个对象。...RegExp//true 关于数组的类型判断,还可以用ES6新增Array.isArray() Array.isArray([]); // true instanceof 三大弊端: 对于基本数据类型来说,字面量方式创建出来的结果和实例方式创建的是有一定的区别的...,也是标准的Number这个类的一个实例;对于字面量方式创建出来的结果是基本的数据类型值,不是严谨的实例,但是由于JS的松散特点,导致了可以使用Number.prototype上提供的方法。
1)所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。...常量池主要用于存放两大类常量:字面量(Literal)和符号引用量(SymbolicReferences),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念...4、常量池的好处 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。...(2)在这段代码后续被运行的时候,"abc"字面量对应的String实例已经固定了,不会再被重复创建。...所以这段代码将常量池中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s1持有。 这条语句创建了2个对象。
SpringBoot 学习视频链接:小狂神Springboot 每日格言: 志当存高远。...spring-boot-starter-thymeleafartifactId> dependency> 使用只需要导入依赖,我们将html放到...文字 文本字面量:'one text', 'Another one!'...,… 数字字面量:0, 34, 3.0, 12.3,… 布尔文字:true,false 空字面量: null 文字标记:one, sometext, main,… 文字操作: 字符串连接: +...小结: 看了一下Springboot的WebMvcAutoConfiguration的设置首页的方法,发现和我们之前SpringMVC的视图解析器十分相似,对比学习,更加提高 模版引擎可以方便我们把数据放到前端页面
本题难度:⭐ JS 中为什么函数被称为一等公民?或者说函数为何是第一类对象? 答: 因为 JavaScript 中函数也是对象,函数拥有对象的所有能力,也因此函数可被作为任意其他类型对象来对待。...函数也是对象 JS 里,一切皆是对象,函数也不例外,废话不多说,直接测试一下, 对象拥有的能力,函数都有 函数也是对象,对象能做的任何一件事,函数都能做。...对象 对象可以通过字面量来创建。 const obj = {} 对象可以赋值给变量、数组项,或其他对象的属性。...const obj = {} obj.name = 'lin' 函数 函数可以通过字面量来创建。 function fn () {} 函数可以赋值给变量、数组项,或其他对象的属性。...函数可以作为函数的入参和出参,这是JS 为何有闭包的一个重要原因。
1、字面量就是我们所说的常量概念,如文本字符串、被声明为final的常量值等。...2、符号引用是一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可(它与直接引用区分一下,直接引用一般是指向方法区的本地指针,相对偏移量或是一个能间接定位到目标的句柄...JDK6,常量池和堆是物理隔离的,常量池在永久代分配内存,永久代和Java堆的内存是物理隔离的。 此处的 intern() ,是将在堆上对象存的内容"abc"拷贝到常量池中。...我们通过例子2,可以更好理解 intern() 方法的底层原理: 我们创建了一个 String 对象,并调用构造器,用字符串字面量初始化它 我们创建了一个 String 对象,并调用构造器,用字符数组初始化它...1)且先看 java文件 的编译结果: 结论:在类文件常量池中,存在字面量“def”,未存在数组 {'a','b','c'} 。
领取专属 10元无门槛券
手把手带您无忧上云