vipkid(cocos creator)

1)js中有哪些数据类型?

5种简单数据类型:
    Undefined、Null、Boolean、Number、String

3种引用类型:
    Object、Array、Function

2)typeof和instanceof的区别?


1.typeof是判断参数是什么类型的实例,就一个参数。 返回值是:"number", "string", "boolean", "object", "function", "undefined"

但是对于Array,null等对象一律返回object,这是typeof的局限性

2.instanceof运算符用来测试对象 在其原型链中是否存在一个构造函数的prototype属性

var a = new Array();
console.log(a instanceof Array);  // true
console.log(a instanceof Object);  // true    因为Array是Object的子类

function Aoo() { }
function Foo() {}
Foo.prototype = new Aoo();
var foo = new Foo();
console.log(foo instanceof Foo); // true
console.log(foo instanceof Aoo); // true

3.下面代码输出结果

var a = [];
console.log(typeof (a)); // object

var b = {};
console.log(b.length); // undefined

console.log(typeof (Array)); // function
console.log(typeof (Object)); // function

console.log(a instanceof Array); // true
console.log(a instanceof Object); // true

let c = 1;
console.log(c instanceof Number); // false
console.log(c instanceof Object); // false
console.log(typeof (c)); // number

4.求下列代码输出结果

var a = [];
a[99] = 1;
console.log(a.length); // 100
console.log(a[0]); // undefined

5.下面代码输出结果

var a = [1,2,4,8];
for(let i in a){
    console.log(i);  // 0 1 2 3
}
console.log("=====");
for (let i of a) {
    console.log(i); // 1 2 4 8
}

6.>> 和 >>>的区别

// >>:带符号右移,正数右移高位补0,负数右移高位补1
console.log(4>>1); // 2
console.log(-4 >> 1); // -2 
console.log(-2 >> 1); // -1

// >>>无符号右移,无论正数还是负数,高位都补0;
// 对于正数,>>和>>>无区别
// 对于负数, 
console.log(-2 >>> 1); // 2147483647
console.log(-1 >>> 1); //2147483647

var a = -1;
var b = -2;
console.log(((a >> 31) ^ (b >> 31)) == 0) ; // true

7.下面代码输出结果

console.log(~0); // -1
console.log(~~0); // 0
console.log(-1>>1); // -1
console.log(-1 >>> 1); // 2147483647
console.log(2^32 -1); // 29

8.==和===区别

9.下面代码输出结果

var a = null, b = undefined, c = 0;
console.log(a === b); // false
console.log(a == b); //true
console.log(a == c); // false

10.函数中this指针指向什么? call apply bind的用法和区别?

11.描述一下let var const的含义

12.下面代码输出结果

console.log(a); // undefined
// console.log(b);
var a = 1;
// let b = 1;
const c = 1;
// const d;
console.log(a); // 1

13.说说对prototype和__proto__的理解

https://blog.csdn.net/major_zhang/article/details/81118387

14.什么是闭包?

在本质上,闭包是将函数内部和函数外部连接起来的桥梁

15.500 * 1000的32位的图片, 占据内存多少?

512 * 1024 * 4

这个4: 32位,就是1个像素rgba表示4个字节,那么那么多像素的,加上自动变为2的次幂..

记不记得颜色单通道最大255,就是因为它是1个字节表示的。 rgba则是4个字节,也就是32位

图片占用内存大小计算---pvr和png为例子(8888=32位 = 4个bit像素点 1024 * 1024=4M)

Zwoptex生成的spritesheet除了可以导出png格式的图片外还有pvr格式。pvr格式是iOS的显示芯片可以直接读取的,不需要经过解析就能直接显示,所以渲染速度更快,更节省内存。
有人做了一项测试:

一个空的cocos2D模版工程运行起来之后占用的内存大约是4MB。

直接用CCSprite显示一张2048*1024的数据格式为RGB565的PNG图片之后,内存占用达到了20MB。同样的情况下换成pvr格式之后,内存占用为16MB。也就是说png格式的图片占用了20-4=16MB,pvr格式的图片占用了16-4=12MB。节省了25%。

Zwoptex还有一个选项叫做“ccz压缩”,选中之后图像的大小几乎可以减小一半。这样的文件格式成了:xxx.pvr.ccz,cocos2d是可以识别的。

PVRTC2和PVRTC4是两种pvr压缩的图像格式,他们都是pvr文件。这两种图像格式比普通图像有更快的加载速度和更小的内存占用。

PVRTC4: Compressed format, 4 bits per pixel, ok image quality

PVRTC2: Compressed format, 2 bits per pixel, poor image quality

一般pvr格式文件的图像格式有:
RGBA8888: 32-bit texture with alpha channel, best image quality
RGBA4444: 16-bit texture with alpha channel, good image quality
RGB565: 16-bit texture without alpha channel, good image quality but no alpha (transparency)


图像占用内存的公式是:numBytes = width * height * bitsPerPixel / 8

也就是说2048*2048的RGBA8888占用内存16MB,而PVRTC4只占用2MB

这里提供一个 pvr 和 png 文件的转换工具,这个是一个命令行工具,需要在终端运行

使用步骤:

先进入这个工具的文件夹,使用终端运行:sudo cp ccz /usr/sbin/  

将工具拷到系统盘,

然后运行例子汇总的命令就可以了,需要在文件的当前文件夹下面运行

就是打开 终端 输入例子中的命令来进行操作

 
ccz -net //查看自己电脑的mac地址
ccz -ccz abc.pvr.ccz //解压abc.pvr.ccz 为abc.pvr
ccz -ccz abc.pvr.ccz -out xxx.pvr //解压abc.pvr.ccz到输出文件名
ccz -pvr abc.pvr //解压abc.pvr为abc.png
ccz -crop abc.png //按abc.plist中图元配置裁剪abc.png为多个小图
ccz -cczcrop abc.ccz //按abc.plist中图元配置裁剪abc.ccz为多个小图
ccz -pvrcrop abc.pvr //按abc.plist中图元配置裁剪abc.pvr为多个小图

链接:http://pan.baidu.com/s/1pJHVRdh密码: irjx

总结:rgba8888   2048*2048      (2048*2048)/(1024*1024)*(8+8+8+8)/8  = 16M 

关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
 
A:透明度

R:红色

G:绿

B:蓝

Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位 

Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位

Bitmap.Config RGB_565:每个像素占四位,即R=5,G=6,B=5,没有透明度,那么一个像素点占5+6+5=16位

Bitmap.Config ALPHA_8:每个像素占四位,只有透明度,没有颜色。

一般情况下我们都是使用的ARGB_8888,由此可知它是最占内存的,因为一个像素占32位,8位=1字节,所以一个像素占4字节的内存。假设有一张480x800的图片,如果格式为ARGB_8888,那么将会占用1500KB的内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值