cocos creator Javascript部分Javascript有哪些数据类型?举例两个最常见的内置对象类型

cocos creator Javascript部分Javascript有哪些数据类型?举例两个最常见的内置对象类型

JavaScript部分

JavaScript 有哪些数据类型? 给出两种最常见的内置对象数据类型的示例。

【答案】数字、字符串、布尔值、空值、未定义、对象

常见的内置对象类型:数组、函数

下面这段代码:

var a = []; a[100] = 1; console.log(a.length); 控制台.log(a[0]); 一个[200] =

不明确的; console.log(a.length); console.lolg(a['100']);

这四个日志语句输出什么?

【解答】分别输出101、undefined、201、1

parseInt('1.9'); parseInt('hello') 返回什么值?

【解答】分别返回1、NaN

空和未定义之间的区别。

【参考答案】null代表一个“空”值,它不同于0和空字符串''。 0是一个数值,''代表长度为0的字符串,null代表“空”。 在其他语言中,也有类似于 JavaScript 的 null 表示。 例如,Java 也使用 null,Swift 使用 nil开发学习,Python 使用 None。 不过,在JavaScript中,也有undefined,它和null类似,意思是“未定义”。

JavaScript 的设计者打算使用 null 来表示空值,使用 undefined 来表示未定义的值。 大多数情况下,我们应该使用 null。 undefined 仅在确定函数参数是否传递时有用。

== 和 === 之间的区别

【参考答案】== 比较时可以自动转换数据类型。 === 严格比较,不自动转换,比较的操作数必须是同一类型,不一致则返回false。

this在函数中指向什么? call、apply、bind的用法和区别。

【参考答案】指的是函数的运行环境。 当执行 obj.func() 时,this 指向 obj。 当直接执行 func() 时3D素材,this 指向全局环境。

call、apply、bind都可以改变函数执行时的运行环境,也就是this的重点。

call和apply都是在调用时立即执行,而bind在调用后返回绑定此对象的原始函数。 bind 更适合将 this 绑定的函数传递到其他函数中执行,尤其是作为回调函数。 异步执行。

call和bind的第一个参数是要绑定的对象,后面是多个要传入原函数的参数; 并且apply的第二个参数必须是一个数组,数组就是要传入的参数。

谈谈你对prototype和__proto__的理解

【参考答案】prototype是只有函数才有的属性,prototype本身也是一个函数对象; __proto __ 是所有对象都有的属性,__proto

__对象的原型,指向构造该对象的对象。 例如:

> var o = new Object() o.__proto__ == Object.prototype < true

o 是一个由 Object 构造的对象,o 的 __proto

__指向Object的原型,这样o就可以使用Object.prototype中的方法。 原型链:js查找对象的属性时,首先检查对象本身是否具有该属性。 如果没有,就会转到__proto

搜索 __ 指向的原型对象,直到找到或者 __proto__ 为 null

* 使用构造函数实现一个类Foo,需要属性count,方法bar()cocos creator,编写方法创建该类的对象。

【参考答案】function Foo(){ this.count = 0; } Foo.prototype.bar = 函数(){ }

var foo = new Foo(); foo.bar();

* 以下代码片段的输出是什么?为什么? 如果我想输出0,1,2,该如何修改呢? var s = []; 函数 foo() { for(var i=0;

是[2]();

【参考答案】输出3,3,3。 因为 foo() 函数在执行时会生成三个闭包,所以这三个闭包绑定到同一个变量 i。 当生成第三个闭包时,i的值为3。因此,执行这三个闭包时,将输出3。

将输出修改为0,1,2的原理是为了将三个闭包绑定到不同的变量上,所以在生成闭包时必须区分它们。 一种修改方法如下:

var s = []; 函数 foo() { for(var i=0; ireturn function(){ document.write(index); } }(i); } } foo(); s[0](); s [1]();

s[2]();

* 说说ES6为什么引入let关键字

【参考答案】因为我们需要解决var声明对象带来的问题。

var 是函数级作用域,而 let 是块作用域。

var 中有变量提升,即变量可以在声明前使用,其值是未定义的cocos creator,而 let 声明的变量如果在声明前使用会抛出错误。

文章来源:https://www.matools.com/blog/190770269