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的内存。