Check if value is NaN

Simple function to check if value might contain a nan value, checks vectors, CFrames and complex tables.

https://create.roblox.com/docs/scripting/security/security-tactics#the-danger-of-nan

local function Get(TableCheck: {})
	local Checked = {}
	local out = {}

	local function recursive(t)
		if Checked[t] then return end
		Checked[t] = true
		for k, v in t do
			if type(v) == "table" then
				recursive(v)
			else
				out[#out + 1] = v
			end
		end
	end

	recursive(TableCheck)
	table.clear(Checked);Checked=nil
	return out
end

local function check(value: vector | number | {number?} | CFrame)
	if type(value) == "number"  and value ~= value then
		return false
	end
	
	if typeof(value):lower():find("vector") then
		for _,v in {value.X, value.Y, typeof(value) == "Vector3" and value.Z or 1} do
			if v ~= v then
				return false
			end
		end
		return true
	end
	
	if type(value) == "table" then
		for _,v in Get(value) do
			if type(v) == "number" and v ~= v then
				return false
			end
		end
	end
	
	if typeof(value) == "CFrame" then
		for _,v in value:GetComponents() do
			if v ~= v then
				return false
			end
		end
	end
	
	return true
end
1 Like